Почему MySQL позволяет VARCHAR (255) иметь большие числа

Вопрос: Когда я впервые узнал о типах полей в MySQL, я бы определил все, что не было числом, как VARCHAR, и установить длину на что угодно. 500 2000, но правильно ли я говорю, что максимум на самом деле 255? Если это так, почему MySQL позволяет мне определять столбцы с гораздо большей длиной и что это

Вопрос:

Когда я впервые узнал о типах полей в MySQL, я бы определил все, что не было числом, как VARCHAR, и установить длину на что угодно. 500 2000, но правильно ли я говорю, что максимум на самом деле 255?

Если это так, почему MySQL позволяет мне определять столбцы с гораздо большей длиной и что это на самом деле делает? Позволит ли он увеличить длину? Определяет ли он столбец/поле как нечто другое?

Любые советы приветствуются.

Лучший ответ:

Это изменение было изменено после 5.0.3:

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

Из справки по документации CHAR и VARCHAR.

Ответ №1

Максимальное значение составляет 65 тыс.

Типы CHAR и VARCHAR

Ответ №2

Это было 255 до 5.0.3, но теперь:

Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 65,535.

Документация 5.0.x показывает переход:

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.

ref: Каков максимальный диапазон varchar в MySQL?

Ответ №3

Существует различие между varchar(n) со значениями n до 255 и значениями, превышающими 255.

MySQL хранит строки переменной длины, кодируя длину строки в первом или двух байтах. Для значений, меньших 256, MySQL использует один байт служебных данных для длины. Для значений n, равных 256 или более, MySQL использует два байта служебных данных для длины.

Обратите внимание, что это основано на определении столбца, а не на содержимом. Таким образом, пустая строка (») может занимать 1 байт в качестве varchar(255) и 2 байта в качестве varchar(256) (не считая места для хранения флагов NULL).

Чтобы обновить ваш член, один байт может хранить целые числа от 0 до 255, а два байта могут хранить от 0 до 65535. Вот откуда берутся эти ограничения.

Ответ №4

MySQL, нажмите на ссылку для получения дополнительной информации.

Столбец VARCHAR (255) может содержать строку длиной не более 255 символов. Предполагая, что столбец использует набор символов latin1 (один байт на символ), требуется фактическое хранилище – длина строки (L) плюс один байт для записи длины строки. Для строки “abcd” L равен 4, а требование хранения – пять байтов. Если тот же столбец вместо этого объявлен для использования двухбайтового набора символов ucs2, требование хранения составляет 10 байтов: длина “abcd” равна восьми байтам, а для хранения столбцов требуется два байта, поскольку максимальная длина больше 255 (до 510 байтов).

Оцените статью
Добавить комментарий