Dans le stockage, il VARCHAR(255)
est assez intelligent pour stocker uniquement la longueur dont vous avez besoin sur une ligne donnée, contrairement à CHAR(255)
ce qui stockerait toujours 255 caractères.
Mais puisque vous avez tagué cette question avec MySQL, je mentionnerai une astuce spécifique à MySQL: lorsque les lignes sont copiées de la couche du moteur de stockage vers la couche SQL, les VARCHAR
champs sont convertis en CHAR
pour gagner l'avantage de travailler avec des lignes de largeur fixe. Ainsi, les chaînes en mémoire sont remplies à la longueur maximale de votre VARCHAR
colonne déclarée .
Lorsque votre requête génère implicitement une table temporaire, par exemple lors du tri ou GROUP BY
, cela peut utiliser beaucoup de mémoire. Si vous utilisez beaucoup de VARCHAR(255)
champs pour des données qui n'ont pas besoin d'être aussi longues, cela peut rendre la table temporaire très volumineuse.
Vous voudrez peut-être aussi savoir que ce comportement de «remplissage» signifie qu'une chaîne déclarée avec le jeu de caractères utf8 remplit jusqu'à trois octets par caractère même pour les chaînes que vous stockez avec un contenu à un octet (par exemple, les caractères ascii ou latin1). Et de même, le jeu de caractères utf8mb4 entraîne le remplissage de la chaîne à quatre octets par caractère en mémoire.
Ainsi, un VARCHAR(255)
in utf8 stockant une chaîne courte comme "No opinion" prend 11 octets sur le disque (dix caractères de jeu de caractères inférieurs, plus un octet pour la longueur) mais cela prend 765 octets en mémoire, et donc dans des tables temporaires ou des résultats triés.
J'ai aidé les utilisateurs de MySQL qui, sans le savoir, ont fréquemment créé des tables temporaires de 1,5 Go et ont rempli leur espace disque. Ils avaient beaucoup de VARCHAR(255)
colonnes qui stockaient en pratique des chaînes très courtes.
Il est préférable de définir la colonne en fonction du type de données que vous souhaitez stocker. Il présente des avantages pour appliquer les contraintes liées aux applications, comme d'autres l'ont mentionné. Mais il a les avantages physiques d'éviter le gaspillage de mémoire que j'ai décrit ci-dessus.
Il est difficile de savoir quelle est l'adresse postale la plus longue, bien sûr, c'est pourquoi de nombreuses personnes choisissent une VARCHAR
adresse longue qui est certainement plus longue que n'importe quelle adresse. Et 255 est habituel car c'est la longueur maximale de a VARCHAR
pour laquelle la longueur peut être codée avec un octet. C'était aussi la VARCHAR
longueur maximale de MySQL antérieure à 5.0.