Почему исторически люди используют 255 не 256 для полевых величин базы данных?

Вы часто видите полевой набор базы данных, чтобы иметь величину 255 символов, каково традиционное / историческая причина почему? Я предполагаю, что это - что-то, чтобы сделать с подкачкой страниц / пределы памяти и производительность, но различие между 255 и 256 всегда смущало меня.

varchar(255)

Рассмотрение этого является способностью или величиной, не индексатором, почему 255 предпочтен более чем 256? Байт резервируется для некоторой цели (разделитель или пустой указатель или что-то)?

По-видимому, varchar (0) является ерундой (имеет нулевую способность)? В этом случае 2^8 пространства должен быть 256, конечно?

Есть ли другие величины, которые обеспечивают выигрыши в производительности? Например, varchar (512) менее производителен, чем varchar (511) или varchar (510)?

Действительно ли это значение является тем же для всех баз данных отношений, старых и новых?

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

Править:

Спасибо за ответы, кажется, существует некоторое согласие, что байт используется для хранения размера, но это не улаживает вопрос окончательно в моем уме.

Если метаданные (длина строки) хранятся в той же непрерывной памяти/диске, это имеет некоторый смысл. 1 байт метаданных и 255 байтов строковых данных, удовлетворили бы друг другу очень приятно и вписались бы в 256 непрерывных байтов устройства хранения данных, которое, по-видимому, аккуратно и опрятно.

Но... Если метаданные (длина строки) хранятся отдельно от фактических строковых данных (в основной таблице, возможно), то ограничить длину данных строки на один байт, просто потому что легче сохранить только 1-байтовое целое число метаданных, кажется немного нечетным.

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

182
задан Andrew M 9 September 2016 в 06:32
поделиться

7 ответов

При максимальной длине 255 символов СУБД может выбрать использование одного байта для указания длины данных в поле. Если бы ограничение было 256 или больше, потребовалось бы два байта.

Для данных varchar, безусловно, допустимо значение длины ноль (если нет других ограничений). Большинство систем рассматривают такую пустую строку как отличную от NULL, но некоторые системы (в частности, Oracle) рассматривают пустую строку идентично NULL. В системах, где пустая строка не является NULL, потребуется дополнительный бит где-то в строке, чтобы указать, следует ли считать значение NULL или нет.

Как вы заметили, это историческая оптимизация и, вероятно, не актуальна для большинства систем сегодня.

160
ответ дан 23 November 2019 в 06:07
поделиться

255 было пределом varchar в mySQL4 и ранее.

Также 255 символов + нулевой терминатор = 256

Или описатель длины в 1 байт дает возможный диапазон 0-255 символов

34
ответ дан 23 November 2019 в 06:07
поделиться

Часто символы varchars реализуются как строки паскаля: они содержат фактическую длину в байте №0. Таким образом, длина была привязана к 255. (Значение байта варьируется от 0 до 255.)

6
ответ дан 23 November 2019 в 06:07
поделиться

Проверьте, принадлежит ли каждый из ваших файлов в .git/текущему пользователю.

У меня была та же самая проблема, когда я понимал, что сделал некоторые фиксации с корневым пользователем, и что создал объекты (под .git/objects), где принадлежать корню, тригерируя ошибки при запуске git как обычного пользователя.

Эта команда решила проблему:

sudo chown jb:jb .git/ -R *
-121--3147423-

Похоже, никто не упомянул Query Express ( http://www.albahari.com/queryexpress.aspx ) и вилку Query ExPlus (также ссылка в нижней части http://www.albahari.com/queryexpress.aspx )

BTW. Первый URL - главная страница Джозефа Албахари, который является автором LINQPad (проверьте этот инструмент убийцы)

-121--2032036-

Максимальная длина 255 позволяет ядру СУБД использовать только 1 байт для хранения длины каждого поля. Правильно, что 1 байт пространства позволяет хранить 2 ^ 8 = 256 различные значения длины последовательности.

Но если вы разрешаете полю хранить текстовые последовательности нулевой длины, вы должны иметь возможность хранить ноль в длину. Таким образом, можно разрешить 256 различных значений длины, начиная с нуля: 0-255.

7
ответ дан 23 November 2019 в 06:07
поделиться

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

13
ответ дан 23 November 2019 в 06:07
поделиться

255 - это наибольшее числовое значение, которое может храниться в однобайтовом беззнаковом целом (предполагая 8-битные байты) - следовательно, приложения, которые хранят длину строки для какой-то цели, предпочтут 255 вместо 256, потому что это означает, что они должны выделить только 1 байт для переменной "size".

18
ответ дан 23 November 2019 в 06:07
поделиться

8 бит без знака = 256 байтов

255 символов + байт 0 для длины

4
ответ дан 23 November 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: