MySQL ofrece una selección de motores de almacenamiento. El almacenamiento físico de datos depende del motor de almacenamiento.
Almacenamiento MyISAM de VARCHAR
En MyISAM, VARCHAR
Los s normalmente ocupan solo la longitud real de la cadena más uno o dos bytes de longitud. Esto se hace práctico por la limitación de diseño de MyISAM al bloqueo de tablas en lugar de una capacidad de bloqueo de filas. Las consecuencias de rendimiento incluyen un perfil de caché más compacto, pero también un cálculo más complicado (más lento) de las compensaciones de registros.
El método de almacenamiento físico es particularmente importante con los índices, que es una historia diferente a las tablas. MyISAM usa compresión de espacio para ambos CHAR
y VARCHAR
columnas, lo que significa que los datos más cortos ocupan menos espacio en el índice en ambos casos.
Almacenamiento InnoDB de VARCHAR
InnoDB, como la mayoría de las bases de datos relacionales actuales, utiliza un mecanismo más sofisticado. VARCHAR
las columnas cuyo ancho máximo sea inferior a 768 bytes se almacenarán en línea, con un espacio reservado que coincida con ese ancho máximo. Más precisamente aquí
:
InnoDB actualmente no realiza compresión de espacio en sus índices, lo opuesto a MyISAM como se describe anteriormente.
Volver a la pregunta
Sin embargo, todo lo anterior es solo un detalle de implementación que incluso puede cambiar entre versiones. La verdadera diferencia entre CHAR
y VARCHAR
es semántico, y también lo es el que está entre VARCHAR(20)
y VARCHAR(50)
. Asegurándose de que no haya forma de almacenar una cadena de 30 caracteres en un VARCHAR(20)
, la base de datos hace la vida más fácil y mejor definida para varios procesadores y aplicaciones que supuestamente integra en una solución de comportamiento predecible. Este es el gran problema.
Con respecto a los nombres personales específicamente, esta pregunta puede darle alguna orientación práctica. Las personas con nombres completos de más de 70 caracteres UTF-8 están en problemas de todos modos.