VARCHARS: 2, 4, 8, 16 и т. Д.? Или 1, 3, 7, 15 и т. Д.? - PullRequest
4 голосов
/ 03 августа 2009

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

Или я что-то упустил?

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

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

Ответы [ 3 ]

10 голосов
/ 03 августа 2009

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

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

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

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

4 голосов
/ 03 августа 2009

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

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

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

2 голосов
/ 03 августа 2009

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

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

...