Вы часто видите, что поля базы данных имеют значение 255 символов, что является традиционной/исторической причиной? Я предполагаю, что это связано с ограничениями подкачки/памяти и производительностью, но различие между 255 и 256 всегда меня путало.
varchar(255)
Учитывая, что это емкость или величина, а не индекс, , почему 255 предпочтительнее 256? Является ли байтом зарезервированным для какой-либо цели (терминатор или нуль или что-то еще)?
Предположительно, varchar (0) - глупость (имеет нулевую емкость)? В этом случае 2 ^ 8 пространства должно быть 256 верно?
Существуют ли другие величины, обеспечивающие производительность? Например, varchar (512) менее эффективен, чем varchar (511) или varchar (510)?
Является ли это значение одинаковым для всех баз данных отношений, старых и новых?
отказ от ответственности. Я разработчик, а не администратор базы данных, я использую размеры и типы полей, которые соответствуют моей бизнес-логике, где это известно, но я хотел бы знать историческую причину этого предпочтения, даже если это больше не актуально (но даже больше, если оно по-прежнему актуально).
Изменить:
Спасибо за ответы, кажется, есть какой-то консенсус, что байт используется для хранения размера, но это не решит вопрос окончательно в моем сознании.
Если метаданные (длина строки) хранятся в одной и той же непрерывной памяти/диске, это имеет смысл. 1 байт метаданных и 255 байтов строковых данных, прекрасно подойдут друг другу и вписываются в 256 смежных байтов хранения, которые предположительно являются аккуратными и аккуратными.
Но... Если метаданные (длина строки) хранятся отдельно от фактических данных строки (возможно, в основной таблице), то для ограничения длины строковых данных одним байтом просто потому, что проще хранить только 1 байтовое число метаданных кажется немного нечетным.
В обоих случаях это, казалось бы, тонкость, которая, вероятно, зависит от реализации БД. Практика использования 255 кажется довольно распространенной, поэтому кто-то где-то, должно быть, аргументировал это хорошим аргументом в начале, может ли кто-нибудь вспомнить, что это был/был? Программисты не будут принимать новую практику без какой-либо причины, и это, должно быть, было новым.