MySQL propose un choix de moteurs de stockage. Le stockage physique des données dépend du moteur de stockage.
Stockage MyISAM de VARCHAR
Dans MyISAM, VARCHAR
s occupent généralement juste la longueur réelle de la chaîne plus un octet ou deux de longueur. Ceci est rendu pratique par la limitation de conception de MyISAM au verrouillage de table par opposition à une capacité de verrouillage de ligne. Les conséquences sur les performances incluent un profil de cache plus compact, mais également un calcul plus compliqué (plus lent) des décalages d'enregistrement.
La méthode de stockage physique est particulièrement importante avec les index, ce qui est une autre histoire que les tables. MyISAM utilise la compression d'espace pour les deux CHAR
et VARCHAR
colonnes, ce qui signifie que les données plus courtes occupent moins d'espace dans l'index dans les deux cas.
Stockage InnoDB de VARCHAR
InnoDB, comme la plupart des autres bases de données relationnelles actuelles, utilise un mécanisme plus sophistiqué. VARCHAR
les colonnes dont la largeur maximale est inférieure à 768 octets seront stockées en ligne, la place réservée correspondant à cette largeur maximale. Plus précisément ici
:
InnoDB ne fait actuellement pas de compression d'espace dans ses index, contrairement à MyISAM comme décrit ci-dessus.
Retour à la question
Tout ce qui précède n'est cependant qu'un détail d'implémentation qui peut même changer entre les versions. La vraie différence entre CHAR
et VARCHAR
est sémantique, tout comme celui entre VARCHAR(20)
et VARCHAR(50)
. En s'assurant qu'il n'y a aucun moyen de stocker une chaîne de 30 caractères dans un VARCHAR(20)
, la base de données rend la vie plus facile et mieux définie pour divers processeurs et applications qu'elle est censée intégrer dans une solution au comportement prévisible. C'est le gros problème.
Concernant les noms personnels en particulier, cette question peut vous donner des conseils pratiques. Les personnes dont le nom complet contient plus de 70 caractères UTF-8 ont de toute façon des problèmes.