MySQL char & varchar jeux de caractères & tailles de stockage

Vous demandez-vous à l'espace de stockage occupé par ces deux types de données, comme la documentation de MySQL est légèrement floue sur la question.

CHAR(M) M × w octets, 0 <= M <= 255, où w est le nombre d'octets
requis pour la longueur maximum de caractères dans le jeu de caractères

VARCHAR(M), VARBINARY(M) L + 1 octets si les valeurs de colonne exiger 0 – 255
octets, L + 2 octets si les valeurs peuvent nécessiter plus de 255 octets

Cela semble impliquer pour moi, étant donné qu'un utf8-encodé en base de données, un CHAR sera toujours prendre jusqu'à 32 bits par caractère, tandis qu'un VARCHAR prendra entre 8 et 32 en fonction de la longueur en octets de caractères stockés. Est-ce exact? Ou un VARCHAR implique une 8-bits largeur de caractère, et le stockage multi-octet de caractères UTF8 consomme réellement plusieurs "caractères" de la VARCHAR? Ou ne VARCHAR également toujours stocker 32 bits par caractère? De nombreuses possibilités.

Pas quelque chose que je n'ai jamais eu à s'inquiéter de ce beaucoup avant, mais je suis en train de frapper en mémoire de la table temporaire des limites de taille et je n'ai pas forcément envie d'avoir à augmenter MySQL est disponible à la piscine (pour la deuxième fois).

OriginalL'auteur pospi | 2012-04-10