database - precisión - tamaño decimal
¿Hay una buena razón por la que veo que VARCHAR(255) se usa tan a menudo(a diferencia de otra longitud)? (8)
En cursos múltiples, libros y trabajos, he visto campos de texto definidos como VARCHAR (255) como el tipo de texto "shortish". ¿Hay alguna buena razón para elegir una longitud de 255 tan a menudo, aparte de ser un buen número redondo ? ¿Es un rechazo de algún momento en el pasado cuando había una buena razón (se aplicara hoy o no)?
Me doy cuenta, por supuesto, de que un límite más estricto sería más ideal, si de alguna manera sabes la longitud máxima de la cuerda. Pero si usa VARCHAR (255) probablemente indique que no conoce la longitud máxima, solo que es una cadena "corta".
Nota: Encontré esta pregunta ( varchar (255) v tinyblob v tinytext ), que dice que VARCHAR ( n ) requiere n +1 bytes de almacenamiento para n <= 255, n +2 bytes de almacenamiento para n > 255. ¿Es esta la única razón? Parece algo arbitrario, ya que solo estaría ahorrando dos bytes en comparación con VARCHAR (256), y podría fácilmente guardar otros dos bytes al declararlo VARCHAR (253).
Nota: Encontré esta pregunta (varchar (255) v tinyblob v tinytext), que dice que VARCHAR (n) requiere n + 1 bytes de almacenamiento para n <= 255, n + 2 bytes de almacenamiento para n> 255. ¿Es esta la única razón? Parece algo arbitrario, ya que solo estaría ahorrando dos bytes en comparación con VARCHAR (256), y podría fácilmente guardar otros dos bytes al declararlo VARCHAR (253).
No. no se guardan dos bytes al declarar 253. La implementación del varchar es muy probablemente un contador de longitud y una matriz de longitud variable no terminada. Esto significa que si almacena "hello" en un varchar (255) ocupará 6 bytes: un byte para la longitud (el número 5) y 5 bytes para las cinco letras.
255 se usa porque es la cantidad más grande de caracteres que pueden contarse con un número de 8 bits. Maximiza el uso del conteo de 8 bits, sin requerir frívolamente que otro byte entero cuente los caracteres por encima de 255.
Cuando se utiliza de esta manera, VarChar solo usa el número de bytes + 1 para almacenar su texto, por lo que también puede establecerlo en 255, a menos que desee un límite estricto (como 50) en el número de caracteres en el campo.
Cuando dice 2^8
obtiene 256
, pero los números en términos de computadoras comienzan desde el número 0
. Entonces, si tiene el 255
, puede sondearlo en una máscara de Internet para la IP o en la IP misma.
255
es el valor máximo de un entero de 8 bits: 11111111 = 255
¿Eso ayuda?
En muchas aplicaciones, como MsOffice (hasta la versión 2000 o 2002), la cantidad máxima de caracteres por celda era 255. Mover datos de programas capaces de manejar más de 255 caracteres por campo hacia / desde esas aplicaciones era una pesadilla. Actualmente, el límite es cada vez menos entorpecedor.
Probablemente porque tanto SQL Server como Sybase (para nombrar dos con los que estoy familiarizado) solían tener un máximo de 255 caracteres en la cantidad de caracteres en una columna VARCHAR
. Para SQL Server, esto cambió en la versión 7 en 1996/1997 más o menos ... pero los viejos hábitos a veces mueren duro.
Un número de 1 byte sin signo puede contener el rango [0-255] inclusive. Entonces, cuando ves 255, es principalmente porque los programadores piensan en la base 10
(¿entiendes?) :)
En realidad, durante un tiempo, 255 fue el tamaño más grande que se podía dar a un VARCHAR en MySQL, y hay ventajas de usar VARCHAR sobre TEXTO con indexación y otros problemas.
Voy a responder la pregunta literal: no , no hay una buena razón por la que veas que VARCHAR (255) se usa tan a menudo (de hecho, hay motivos , como se comenta en las otras respuestas, simplemente no son buenos). No encontrará muchos ejemplos de proyectos que hayan fallado catastróficamente porque el arquitecto eligió VARCHAR (300) en lugar de VARCHAR (255). Esto sería un problema de insignificancia casi total, incluso si estuvieras hablando de CHAR en lugar de VARCHAR.
Históricamente, 255 caracteres a menudo han sido la longitud máxima de un VARCHAR
en algunos DBMS, y a veces aún termina siendo el máximo efectivo si desea usar UTF-8 y tiene la columna indexada (debido a las limitaciones de longitud del índice).