Se pregunta cuánto espacio de almacenamiento real ocuparán estos dos tipos de datos, ya que la documentación de MySQL no está del todo clara al respecto.Conjuntos de caracteres y tamaños de almacenamiento de MySQL char & varchar
CHAR (M) M × w bytes, 0 < = M < = 255, donde w es el número de bytes necesarios para el carácter de longitud máxima en el conjunto de caracteres
VARCHAR (M) , VARBINARY (M) L + 1 bytes si los valores de columna requieren 0 - 255 bytes, L + 2 bytes si los valores pueden requerir más de 255 bytes
Esto parece implicar a mí que, dado un utf8-codificada base de datos, un CHAR siempre ocupará 32 bits por carácter, mientras que un VARCHAR tomará entre 8 y 32 dependiendo de la longitud del byte real de los caracteres almacenados. ¿Es eso correcto? ¿O un VARCHAR implica un ancho de caracteres de 8 bits, y el almacenamiento de caracteres UTF8 de múltiples octetos en realidad consume varios 'caracteres' del VARCHAR? ¿O el VARCHAR también almacena siempre 32 bits por personaje? Tantas posibilidades
No es algo de lo que haya tenido que preocuparme antes, pero estoy empezando a alcanzar los límites de tamaño de la tabla temporal en memoria y no quiero necesariamente tener que aumentar el conjunto disponible de MySQL (para el segundo hora).
para añadir a esto, 'almacenamiento utf8' de MySQL no es solo lisiado, no es tu estándar UTF-8 tampoco. Las cadenas codificadas con 'utf8' se almacenan utilizando aproximadamente el doble del almacenamiento de las cadenas codificadas en UTF-8, lo que lo hace aún más ineficiente. – deceze
@deceze No estaba al tanto de eso. ¿Tiene algún detalle o referencia sobre eso? – Celada
Ojalá lo hubiera hecho, pero la documentación no dice mucho al respecto. Hubo una pregunta reciente aquí sobre el volcado de la base de datos donde los datos fueron volcados en binario-como-es, que es donde esto es muy aparente. – deceze