Do MySQL Documentação :
A diferença entre
CHAR
e VARCHAR
valores é a maneira como eles são armazenados, CHAR (10)
requer 10 bytes de armazenamento, não importa quantos caracteres você use porque os dados são preenchidos à direita com espaços, VARCHAR (10)
leva apenas 1 byte (em um conjunto de caracteres de 1 byte) + prefixo de comprimento (1 quando o comprimento é 255 ou menos, 2 caso contrário... Não sei por que key_len para EXPLAIN
adicionar 2 bytes) Não entendo o que você quer dizer com espaços em branco à direita, embora possa imaginar que você esteja se referindo ao excesso de espaços à direita, com
VARCHAR
estes são truncados com um aviso, enquanto isso em CHAR
colunas esses espaços são truncados silenciosamente, isso tem algum sentido porque CHAR
são armazenados com espaços em branco no final. Em relação ao conjunto de caracteres neste link você pode ver que o número de caracteres para o
CHAR
ou VARCHAR
é o mesmo, embora seu armazenamento exija de 1 a 4 bytes por caractere, aqui
é a lista de conjuntos de caracteres suportados e aqui os bytes por caractere. O que li sobre diferentes formatos de linhas para InnoDB
Características de formato de linha redundante :
Características de formato de linha COMPACTA :