Вопрос

Я вижу, что VARCHAR(255) используется постоянно вместо VARCHAR (256), но я также вижу, что VARCHAR (16) используется вместо VARCHAR (15).Мне это кажется непоследовательным.Если для хранения длины переменной используется дополнительный байт, разве это правило не должно также применяться к меньшим длинам, таким как 2, 4, 8, вместо 1, 3, 7?

Или я что-то совершенно упускаю из виду?

Другими словами, если у меня есть число, которое, как я знаю, никогда не будет выше 12, должен ли я просто пойти дальше и вместо этого использовать VARCHAR (15) или VARCHAR (16)?Потому что он использует тот же объем пространства, что и VARCHAR(12)?Если да, то какой из них мне использовать?15 или 16?Меняется ли это правило вообще, когда я приближаюсь к 256?

Я использую как MySQL, так и SQL, в зависимости от проекта.

Это было полезно?

Решение

Другими словами, если у меня есть число, которое, как я знаю, никогда не будет выше 12, должен ли я просто пойти дальше и вместо этого использовать VARCHAR (15) или VARCHAR (16)?

Нет!Используйте varchar(12) (или, возможно, даже char(12), если длина достаточно постоянна ).

Когда - то давно тип varchar в некоторых системах был ограничен 255 символами (включая MySQL до версии 5.0.3) потому что первый сохраненный байт указывал длину поля.Учитывая это ограничение, разработчики, желающие разрешить разумный объем текста, выбрали бы 255, а не переходили бы вообще к другому типу данных.

Но если вы знаете размер своих данных, обязательно используйте именно этот размер для базы данных.

Другие советы

Это не имеет ничего общего с нечетными или четными числами.

Исторически сложилось, что 255 символов часто были максимальной длиной VARCHAR в различных СУБД. Ограничение длины для поля, которое тогда не было LOB (Large Object), составляло 255 байт (1 байт int). Таким образом, первый байт использовался для хранения длины поля (0-255), а оставшиеся байты n для символов. Вот почему вы часто видите VARCHAR (255) .

Если поле никогда не будет больше 12, используйте VARCHAR (12) .

Я думаю, что оригинальная проблема заключается в том, что для некоторых систем VARCHAR (...) был ограничен 255, потому что когда вы используете один байт для кодирования фактической длины, вы можете выразить длину только до 255.

VARCHAR (16) / VARCHAR (15), скорее всего, он напоминает об этих источниках, но в этих двух значениях нет ничего особенного.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top