Подтвердить что ты не робот

Ограничение по размеру MySQL VARCHAR

Если у меня есть столбец в таблице с полем типа VARCHAR(15), и если я попытаюсь вставить данные длиной 16, MySQL дает сообщение об ошибке

Data too long for column 'testname' at row 1

Кто-нибудь знает, почему поля VARCHAR в MySQL занимают фиксированную длину? Также, сколько байтов занимает поле VARCHAR для записи на основе указанного размера?

4b9b3361

Ответ 1

Если вы устанавливаете столбец varchar(15), допустимые максимальные байты равны 15. Таким образом, вы не можете передать более 15 символов без изменения столбца для поддержки более 15. Если вы храните строку из 4 символов, она должна используйте только 4 байта из возможных 15, тогда как если бы вы использовали char(15), он заполнил бы остальные 11 пустыми байтами.

http://dev.mysql.com/doc/refman/5.0/en/char.html

(Мой байтовый расчет был, вероятно, выключен, так как он всегда -1/+ 1 или что-то в этом роде).

Ответ 2

Из Руководство MySQL 5.0:

Значения в столбцах VARCHAR представляют собой строки переменной длины. Длина может быть указана как значение от 0 до 255 до MySQL 5.0.3 и от 0 до 65535 в 5.0.3 и более поздних версиях. Эффективная максимальная длина VARCHAR в MySQL 5.0.3 и более поздних версиях зависит от максимального размера строки (65 535 байт, которая распределяется между всеми столбцами) и используемого набора символов.

Я использую только VARCHAR, когда я уверен, что данные, которые должен содержать столбец, никогда не будут превышать определенную длину, и даже тогда я осторожен. Если я храню текстовую строку, я использую один из типов TEXT.

Ознакомьтесь с Требованиями к хранению MySQL для получения дополнительной информации о том, как используются байты.

Ответ 3

Небольшая дополнительная локальная заметка. Количество используемых байтов будет зависеть от используемой схемы кодирования. 1 байт на символ в кодировке latin1, но до 3 в UTF8. Подробнее см. Ссылку в файле mlambie.

Ответ 4

Если вы посмотрите здесь, он должен рассказать вам все о варчаре, который вы хотите знать: http://dev.mysql.com/doc/refman/5.0/en/char.html

В принципе, в зависимости от выбранной вами длины он будет использовать 1 или два байта для отслеживания длины текущей строки в этом столбце, поэтому он будет хранить количество байтов для данных, которые вы вставляете, плюс один или два байта.

Итак, если вы введете 'abc', то для этого столбца в этой строке будет 4 или 5 байтов.

Если вы использовали char(15), тогда даже "abc" будет занимать 15 байт, так как данные будут правильно дополнены, чтобы использовать до 15 байт.