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 :