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

¿Cómo almacena InnoDB las columnas de caracteres?

Desde MySQL Documentación :

La diferencia entre CHAR y VARCHAR valores es la forma en que se almacenan, CHAR (10) requiere 10 bytes de almacenamiento sin importar cuántos caracteres use porque los datos se rellenan a la derecha con espacios, VARCHAR (10) solo toma 1 byte (en un conjunto de caracteres de 1 byte) + prefijo de longitud (1 cuando la longitud es 255 o menos, 2 de lo contrario... No sé por qué key_len para EXPLAIN añadir 2 bytes)

No entiendo a qué te refieres con espacios en blanco al final, aunque imagino que te refieres al exceso de espacios al final, con VARCHAR estos se truncan con una advertencia, mientras tanto en CHAR columnas estos espacios se truncan silenciosamente, esto tiene algún sentido porque CHAR se almacenan con espacios en blanco al final.

Con respecto al conjunto de caracteres en este enlace puede ver que la cantidad de caracteres para el CHAR o VARCHAR es lo mismo, aunque su almacenamiento requerirá de 1 a 4 bytes por carácter, aquí es la lista de conjuntos de caracteres admitidos y aquí los bytes por carácter.

Lo que he leído sobre diferentes formatos de filas para InnoDB

Características del formato de fila redundante :

Características del formato de fila COMPACT :