Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como o InnoDB armazena colunas de caracteres?


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 :