Есть ли веская причина, по которой я вижу, что VARCHAR (255) используется так часто (в отличие от другой длины)? - PullRequest
128 голосов
/ 02 августа 2009

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

Я понимаю, конечно, что более жесткий предел был бы более идеальным, если бы вы как-то знали максимальную длину строки. Но если вы используете VARCHAR (255), это, вероятно, означает, что вы не знаете максимальную длину, только то, что это «короткая» строка.


Примечание: я нашел этот вопрос ( varchar (255) v tinyblob v tinytext ), который говорит, что VARCHAR ( n ) требует n + 1 байт. памяти для n <= 255, <em>n + 2 байта памяти для n > 255. Это единственная причина? Это кажется произвольным, поскольку вы сохраняете только два байта по сравнению с VARCHAR (256), и вы можете также легко сохранить еще два байта, объявив его VARCHAR (253).

Ответы [ 9 ]

140 голосов
/ 02 августа 2009

255 используется потому, что это наибольшее количество символов, которое можно посчитать с помощью 8-битного числа. Это максимизирует использование 8-битного счетчика, не требуя легкомысленного другого целого байта для подсчета символов выше 255.

При использовании этого способа VarChar использует только количество байтов + 1 для хранения вашего текста, так что вы можете также установить его на 255, если вы не хотите жесткого ограничения (например, 50) на количество символов в поле .

83 голосов
/ 02 августа 2009

Исторически сложилось, что 255 символов часто были максимальной длиной VARCHAR в некоторых СУБД, и иногда это все равно оказывается эффективным максимумом, если вы хотите использовать UTF-8 и индексировать столбец (из-за длины индекса ограничения).

19 голосов
/ 02 августа 2009

Возможно, потому что и SQL Server, и Sybase (если не считать двух, с которыми я знаком) имели максимум 255 символов в количестве символов в столбце VARCHAR. Для SQL Server это изменилось в версии 7 в 1996/1997 или около того ... но старые привычки иногда умирали.

14 голосов
/ 02 августа 2009

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

11 голосов
/ 17 января 2012

Когда вы говорите 2^8, вы получаете 256, но цифры в терминах компьютеров начинаются с цифры 0. Итак, вы получили 255, вы можете проверить его в маске интернета для IP или в самом IP.

255 - максимальное значение 8-битного целого числа: 11111111 = 255

Это помогает?

7 голосов
/ 02 августа 2009

Примечание: я нашел этот вопрос (varchar (255) v tinyblob v tinytext), который говорит, что VARCHAR (N) требует n + 1 байт памяти для n <= 255, n + 2 байт памяти для n> 255. Это единственная причина? Это кажется своего рода произвольно, так как вы бы только экономя два байта по сравнению с VARCHAR (256), и вы могли бы так же, как легко сохранить еще два байта объявив это VARCHAR (253).

Нет. Вы не экономите два байта, объявив 253. Реализация varchar - это, скорее всего, счетчик длины и неопределенный массив переменной длины. Это означает, что если вы храните «привет» в varchar (255), вы будете занимать 6 байт: один байт для длины (число 5) и 5 ​​байт для пяти букв.

3 голосов
/ 26 ноября 2010

Во многих приложениях, таких как MsOffice (до версии 2000 или 2002), максимальное количество символов на ячейку составляло 255. Перемещение данных из программ, способных обрабатывать более 255 символов на поле, в / из этих приложений было кошмаром. В настоящее время лимит все меньше и меньше мешает.

3 голосов
/ 02 августа 2009

1-байтовое число без знака может содержать диапазон [0-255] включительно. Так что, когда вы видите 255, это в основном потому, что программисты думают на базе 10 (пошутить?):)

На самом деле, некоторое время 255 был самым большим размером, который вы могли дать VARCHAR в MySQL, и есть преимущества использования VARCHAR по сравнению с TEXT с индексацией и другими проблемами.

0 голосов
/ 02 апреля 2019

Другая причина может заключаться в том, что в очень старых библиотеках доступа к данным в Windows, таких как RDO и ADO (COM-версия, а не ADO.NET), вам пришлось вызывать специальный метод GetChunk, чтобы получить данные из столбца с более чем 255 символами. , Если вы ограничили столбец varchar значением 255, этот дополнительный код не понадобился.

...