Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment InnoDB stocke-t-il les colonnes de caractères ?

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 :