A menudo ve que los campos de la base de datos tienen una magnitud de 255 caracteres, ¿cuál es la razón tradicional / histórica por la que? Supongo que tiene que ver con los límites de paginación / memoria y el rendimiento, pero la distinción entre 255 y 256 siempre me ha confundido.
varchar(255)
Teniendo en cuenta que esto es una capacidad o magnitud, no un indexador , ¿por qué se prefiere 255 sobre 256? ¿Se reserva un byte para algún propósito (terminador o nulo o algo)?
Presumiblemente varchar (0) no tiene sentido (tiene capacidad cero)? ¿En qué caso 2 ^ 8 de espacio deberían ser 256 seguramente?
¿Existen otras magnitudes que brinden beneficios de rendimiento? Por ejemplo, ¿varchar (512) tiene menos rendimiento que varchar (511) o varchar (510)?
¿Es este valor el mismo para todas las bases de datos de relaciones, antiguas y nuevas?
Descargo de responsabilidad : soy un desarrollador, no un DBA, uso tamaños y tipos de campo que se adaptan a mi lógica de negocios donde se conoce, pero me gustaría saber la razón histórica de esta preferencia, incluso si ya no es relevante (pero incluso más si aún es relevante).
Editar:
Gracias por las respuestas, parece haber cierto consenso de que se usa un byte para almacenar el tamaño, pero esto no resuelve el asunto definitivamente en mi mente.
Si los metadatos (longitud de la cadena) se almacenan en la misma memoria / disco contiguo, tiene sentido. 1 byte de metadatos y 255 bytes de datos de cadena, se adaptarían muy bien entre sí y encajarían en 256 bytes contiguos de almacenamiento, lo que presumiblemente es ordenado y ordenado.
Pero ... Si los metadatos (longitud de la cadena) se almacenan por separado de los datos de la cadena real (tal vez en una tabla maestra), entonces restringir la longitud de los datos de la cadena en un byte, solo porque es más fácil almacenar solo un entero de 1 byte de metadatos parece un poco extraño.
En ambos casos, parecería ser una sutileza que probablemente depende de la implementación de la base de datos. La práctica de usar 255 parece bastante generalizada, por lo que alguien en algún lugar debe haber argumentado un buen caso al principio, ¿alguien puede recordar cuál fue / es ese caso? Los programadores no adoptarán ninguna práctica nueva sin una razón, y esto debe haber sido nuevo una vez.