2009-08-03 6 views
4

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

Или я совсем чего-то не хватает?

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

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

ответ

10

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

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

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

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

+0

Спасибо. Ответы всех были полезны, но я должен был выбрать один. – jedmao

+4

** @ geocar: ** Если ваш язык базы данных настроен правильно, 'VARCHAR (12)' будет содержать 12 символов. ** 'VARCHAR' соответствует языковым стандартам ** –

2

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

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

+3

Я думаю, что большая причина, по которой вы видите 15 и 16, состоит в том, что программисты думали, что они« оптимизируют », но просто закончили смущать будущих программистов относительно того, каковы были их намерения. – cdmckay

+1

LOL это именно то, что я думал! И это сработало! Это меня полностью смутило. Благодаря! – jedmao

4

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

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

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

+0

Причина, по которой это 255, заключается в том, что, когда вы используете первый байт для хранения длины поля, этот 8-битовый байт может указывать только длины от 0 до 255. –

+0

** @ Joel: ** Правда, просто не хотелось перейдите в семантику. Я отредактировал свой ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^