В хранилище VARCHAR(255)
достаточно умен, чтобы хранить только ту длину, которая вам нужна в данной строке, в отличие от CHAR(255)
которой всегда хранится 255 символов.
Но поскольку вы пометили этот вопрос с помощью MySQL, я упомяну совет, относящийся к MySQL: по мере того, как строки копируются с уровня механизма хранения на уровень SQL, VARCHAR
поля преобразуются в, CHAR
чтобы получить преимущество работы со строками фиксированной ширины. Таким образом, строки в памяти заполняются до максимальной длины объявленного VARCHAR
столбца.
Когда ваш запрос неявно создает временную таблицу, например, при сортировке или GROUP BY
, это может использовать много памяти. Если вы используете много VARCHAR(255)
полей для данных, которые не должны быть такими длинными, временная таблица может стать очень большой.
Вам также может быть интересно узнать, что такое поведение «заполнения» означает, что строка, объявленная с набором символов utf8, дополняется до трех байтов на символ даже для строк, которые вы храните с однобайтовым содержимым (например, символы ascii или latin1). И аналогично набор символов utf8mb4 заставляет строку заполнять до четырех байтов на символ в памяти.
Таким образом, VARCHAR(255)
в utf8 для хранения короткой строки, такой как «Нет мнения», требуется 11 байт на диске (десять символов нижнего набора символов плюс один байт для длины), но он занимает 765 байт в памяти и, следовательно, во временных таблицах или отсортированных результатах.
Я помогал пользователям MySQL, которые по незнанию часто создавали временные таблицы объемом 1,5 ГБ и заполняли свое дисковое пространство. У них было много VARCHAR(255)
столбцов, в которых на практике хранились очень короткие строки.
Лучше всего определять столбец в зависимости от типа данных, которые вы собираетесь хранить. Как отмечали другие люди, он имеет преимущества в обеспечении соблюдения ограничений, связанных с приложением. Но у него есть физические преимущества, позволяющие избежать потери памяти, о которой я говорил выше.
Конечно, трудно определить самый длинный почтовый адрес, поэтому многие люди выбирают длинный, VARCHAR
который определенно длиннее любого адреса. А 255 является обычным, потому что это максимальная длина, VARCHAR
для которой длина может быть закодирована одним байтом. Это также была максимальная VARCHAR
длина в MySQL старше 5.0.