Depuis MySQL Documentation :
La différence entre CHAR
et VARCHAR
les valeurs sont la façon dont elles sont stockées, CHAR (10)
nécessite 10 octets de stockage, quel que soit le nombre de caractères que vous utilisez, car les données sont remplies à droite avec des espaces, VARCHAR (10)
ne prend que 1 octet (dans un jeu de caractères de 1 octet) + préfixe de longueur (1 lorsque la longueur est de 255 ou moins, 2 sinon... Je ne sais pas pourquoi key_len pour EXPLAIN
ajoutez 2 octets)
Je ne comprends pas ce que vous voulez dire par des blancs de fin, même si je peux imaginer que vous faites référence à l'excès d'espaces de fin, avec VARCHAR
ceux-ci sont tronqués avec un avertissement, entre-temps dans CHAR
colonnes ces espaces sont tronqués silencieusement, cela a un certain sens car CHAR
sont stockés avec des espaces à la fin.
Concernant le jeu de caractères dans ce lien vous pouvez voir que le nombre de caractères pour le CHAR
ou VARCHAR
est le même, bien que votre stockage nécessitera de 1 à 4 octets par caractère, ici
est la liste des jeux de caractères pris en charge et ici les octets par caractère.
Ce que j'ai lu sur les différents formats de lignes pour InnoDB
Caractéristiques du format de ligne redondant :
Caractéristiques du format de ligne COMPACT :