En almacenamiento, VARCHAR(255)
es lo suficientemente inteligente como para almacenar solo la longitud que necesita en una fila determinada, a diferencia de CHAR(255)
lo que siempre almacenaría 255 caracteres.
Pero como etiquetó esta pregunta con MySQL, mencionaré un consejo específico de MySQL: a medida que las filas se copian desde la capa del motor de almacenamiento a la capa SQL, los VARCHAR
campos se convierten CHAR
para obtener la ventaja de trabajar con filas de ancho fijo. Entonces, las cadenas en la memoria se rellenan hasta la longitud máxima de su VARCHAR
columna declarada .
Cuando su consulta genera implícitamente una tabla temporal, por ejemplo, mientras ordena o GROUP BY
, esto puede usar mucha memoria. Si usa muchos VARCHAR(255)
campos para datos que no necesitan ser tan largos, esto puede hacer que la tabla temporal sea muy grande.
También puede interesarle saber que este comportamiento de "relleno" significa que una cadena declarada con el juego de caracteres utf8 se reduce a tres bytes por carácter, incluso para las cadenas que almacena con contenido de un solo byte (por ejemplo, caracteres ascii o latin1). Y del mismo modo, el juego de caracteres utf8mb4 hace que la cadena se rellene hasta cuatro bytes por carácter en la memoria.
Entonces, VARCHAR(255)
en utf8 almacenar una cadena corta como "Sin opinión" toma 11 bytes en el disco (diez caracteres de juego de caracteres inferiores, más un byte de longitud) pero toma 765 bytes en memoria y, por lo tanto, en tablas temporales o resultados ordenados.
He ayudado a usuarios de MySQL que, sin saberlo, creaban tablas temporales de 1,5 GB con frecuencia y ocupaban su espacio en disco. Tenían muchas VARCHAR(255)
columnas que en la práctica almacenaban cadenas muy cortas.
Es mejor definir la columna según el tipo de datos que desea almacenar. Tiene beneficios para hacer cumplir las restricciones relacionadas con la aplicación, como han mencionado otras personas. Pero tiene los beneficios físicos para evitar el desperdicio de memoria que describí anteriormente.
Es difícil saber cuál es la dirección postal más larga, por supuesto, por lo que muchas personas eligen una dirección larga VARCHAR
que ciertamente es más larga que cualquier dirección. Y 255 es habitual porque es la longitud máxima de a VARCHAR
para la que la longitud se puede codificar con un byte. También fue la VARCHAR
longitud máxima en MySQL anterior a 5.0.