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

varchar(20) et varchar(50) sont les mêmes ?

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.

(En fait, MyISAM vous donne un degré de choix entre la taille de ligne physique fixe et les formats de table de taille de ligne physique variable en fonction des types de colonnes apparaissant dans l'ensemble de la table. Occurrence de VARCHAR modifie uniquement la méthode par défaut, mais la présence d'un TEXT blob force VARCHAR s dans le même tableau pour utiliser également la méthode de longueur variable.)

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.