Задавайте вопросы, мы ответим
Вы не зашли.
Ребята, привет!
Подскажите, пожалуйста, почему такая картина. Судя по данным, приведенным ниже, для версии MySQL 5.0.45 я вполне должен быть способен создать поле типа VARCHAR длиной 65535 символов, почему при попытке создать поле такой длины, движок принимает за меня решение назначить этому полю тип MEDIUMTEXT?
dev.mysql.com написал:
Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in 5.0.3 and later versions. The effective maximum length of a VARCHAR in MySQL 5.0.3 and later is subject to the maximum row size (65,535 bytes, which is shared among all columns) and the character set used.
Отредактированно FiMko (20.04.2010 23:20:22)
Неактивен
Блин кажись допёр - utf8, умножаем всё на два !
Хотя 65535/2=32767 с копеками ...
Отредактированно FiMko (20.04.2010 22:46:16)
Неактивен
Судя по всему вы используете кодировку utf8, т.е. для хранения одного символа требуется три байта, а для хранения максимально возможного для данного типа количества символов потребуется 3 × 65,535 = 196,605 байт. Данное количество превышает длину данных в байтах, которую может содержать тип данных VARCHAR(65535), поэтому MySQL преобразует тип данных в MEDIUMTEXT, который является наименьшим из строковых типов, для которого длина данных в байтах может равняться 196,605.
Вот если бы вы использовали кодировку, например, latin1, то смогли бы создать VARCHAR(65535)
Неактивен
vasya написал:
Судя по всему вы используете кодировку utf8, т.е. для хранения одного символа требуется три байта, а для хранения максимально возможного для данного типа количества символов потребуется 3 × 65,535 = 196,605 байт. Данное количество превышает длину данных в байтах, которую может содержать тип данных VARCHAR(65535), поэтому MySQL преобразует тип данных в MEDIUMTEXT, который является наименьшим из строковых типов, для которого длина данных в байтах может равняться 196,605.
Вот если бы вы использовали кодировку, например, latin1, то смогли бы создать VARCHAR(65535)
Точно три байта, а не два. Спасибо!
Гы, интересно, а на граничном значении движок решил меня предупредить:
Отредактированно FiMko (20.04.2010 23:03:23)
Неактивен
vasya написал:
Вот если бы вы использовали кодировку, например, latin1, то смогли бы создать VARCHAR(65535)
Отредактированно FiMko (20.04.2010 23:39:30)
Неактивен
Сделайте NOT NULL и спасете еще один байт, а 2 байта под длину строки.
Неактивен
rgbeast написал:
Сделайте NOT NULL и спасете еще один байт, а 2 байта под длину строки.
Вот так вот по байтику по байтику ... Спасибо, rgbeast!
Неактивен
На самом деле, самоучители тоже не врут — в VARCHAR(21845) Вы сможете засунуть
не более 21845 символов. А вот ограничение на максимальную длину VARCHAR —
в байтах. Некоторая путаница, но связана она с адресацией в 2 байта, поэтому понятна
Неактивен