sql >> Base de Datos >  >> RDS >> Mysql

varchar (20) y varchar (50) son iguales?

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.

(De hecho, MyISAM le ofrece un grado de elección entre el tamaño de fila físico fijo y los formatos de tabla de tamaño de fila física variable según los tipos de columna que aparecen en toda la tabla. Ocurrencia de VARCHAR cambia solo el método predeterminado, pero la presencia de un TEXT blob fuerzas VARCHAR s en la misma tabla para usar también el método de longitud variable).

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.