Maison  >  Article  >  base de données  >  La différence entre char et varchar dans MySQL

La différence entre char et varchar dans MySQL

黄舟
黄舟original
2017-09-07 13:12:411685parcourir

Dans le tutoriel MySQL, la différence entre char et varchar est qu'ils sont tous deux utilisés pour stocker des chaînes, mais leurs méthodes de stockage sont différentes. char a une longueur fixe, tandis que varchar est un type de caractère de longueur variable.

La différence entre char et varchar

char (13) a une longueur fixe, comme 'www.jb51.net', qui nécessite 12 caractères d'espace de stockage

varchar (13 ) Une longueur variable telle que 'www.jb51.net' nécessite un espace de stockage de 13 caractères,

Comme le montre ce qui précède, la longueur du caractère est fixe, peu importe la quantité les données que vous stockez, elles seront de longueur fixe. Varchar est de longueur variable, mais il doit ajouter 1 caractère à la longueur totale, qui est utilisé pour stocker la position. Par conséquent, dans les applications réelles, les utilisateurs peuvent le faire en fonction de leurs propres types de données.

Regardons la différence de vitesse entre char et varchar.

Le code est le suivant :

mysal>create tabe ab(v varchar(4),c char(4)); 
query ok ,0 rows affected(0.02 sec) 
mysql>insert into abc values('ab ','ab ') 
query ok ,1 row affected(0.00 sec); 
mysql->select concat(v ,'+') ,concat(c ,'+') form abc 
ab + | ab+ 
1rows in set (0.00 sec)


Comme le montre ce qui précède, pour une raison quelconque, char a une longueur fixe, donc la vitesse de traitement est beaucoup plus rapide que varchar, mais cela coûte de l'espace de stockage, donc le stockage n'est pas grand, mais en termes de vitesse Si nécessaire, vous pouvez utiliser le type char, sinon vous pouvez utiliser le type varchar par exemple.

Remarque :

Lorsque vous utilisez le type de caractère char et qu'il y a un espace derrière le contenu, un traitement approprié doit être effectué, sinon l'espace sera automatiquement supprimé.

Recommandation :

le moteur de stockage myisam recommande d'utiliser des colonnes de données de longueur fixe au lieu de colonnes de données de longueur variable.
Les moteurs de stockage en mémoire utilisent actuellement le stockage de lignes de données fixes, donc peu importe que vous utilisiez des colonnes char varchar
Le moteur de stockage innodb recommande d'utiliser le type varchar


Ce qui suit sont. Supplément d'autres internautes

char est un type de longueur fixe et varchar est un type de longueur variable
Dans une colonne de données de type char(M), chaque valeur occupe M octets, si un certain la longueur est inférieure à M, MySQL la remplira avec des espaces à droite. (Les espaces de remplissage seront supprimés lors de l'opération de recherche.) Dans une colonne de données de type varchar(M), chaque valeur n'occupe que juste assez d'octets plus un octet pour enregistrer sa longueur (c'est-à-dire que la longueur totale est L+1 octets ).

Règles utilisées dans MySQL pour déterminer si la conversion de type de colonne est requise

1. Dans une table de données, si la longueur de chaque colonne de données est fixe, alors la la longueur de chaque ligne de données sera également fixe.
2. Tant qu'il y a une longueur variable de colonne de données dans le tableau de données, la longueur de chaque ligne de données sera variable.
 3. Si la longueur des lignes de données dans une table de données est variable, alors, afin d'économiser de l'espace de stockage, MySQL convertira les colonnes de données de longueur fixe dans la table de données en type de longueur variable correspondant ..
Exception : les colonnes de données char d'une longueur inférieure à 4 caractères ne seront pas converties en type varchar

Pour les tables MyISAM, essayez d'utiliser Char Pour les tables de données myisam et isam qui doivent souvent être modifiées. et sont facilement fragmentés. C'est encore plus vrai Son inconvénient est qu'il prend de l'espace disque
Pour les tables InnoDB, car son format de stockage interne des lignes de données est adapté aux longueurs fixes. lignes de données et lignes de données de longueur variable. Il n'y a pas de distinction (toutes les lignes de données partagent une partie d'en-tête, et cette partie d'en-tête stocke des pointeurs vers chaque colonne de données pertinente), donc l'utilisation du type char n'est pas nécessairement meilleure que l'utilisation du type varchar. En fait, comme le type char prend généralement plus d'espace que le type varchar, il est plus avantageux d'utiliser le type varchar du point de vue de la réduction de l'utilisation de l'espace et des E/S disque

Article 2 : <.>Le caractère devrait être le plus courant, mais il semble que chaque base de données soit différente. Par exemple, il y a varchar2 dans Oracle. Cependant, MySQL semble se concentrer davantage sur char et varchar.
Dites-moi la différence. Char est de longueur fixe, tandis que varchar utilise l'espace de stockage en fonction de la longueur spécifique. Par exemple, char(255) et varchar(255), lors du stockage de la chaîne "hello world", char utilisera un espace de 255 pour stocker les 11 caractères, tandis que varchar n'utilisera pas 255. Il calcule d'abord la longueur, puis seulement Utilisez 11 plus les informations calculées sur la longueur de chaîne, généralement 1 à 2 octets, afin que varchar réduise considérablement l'espace de stockage lors du stockage de longueurs incertaines.


Il semble que varchar soit beaucoup plus intelligent que char, alors char est-il utile ? Les avantages sont encore nombreux.
Tout d'abord, stockez des informations très courtes, telles que les numéros de maison 101, 201... Des informations aussi courtes devraient utiliser char, car varchar prend également un octet pour stocker la longueur des informations. Initialement destiné à économiser, le stockage est désormais un gaspillage d'argent.

Deux, longueur fixe. Par exemple, si uuid est utilisé comme clé primaire, char devrait être plus approprié. Comme il a une longueur fixe, les caractéristiques dynamiques de varchar basées sur la longueur disparaissent et il utilise également des informations sur la longueur.

3. Colonne qui change très fréquemment. Parce que chaque fois que varchar est stocké, des calculs supplémentaires sont nécessaires pour obtenir la longueur et d'autres travaux. Si elle change très fréquemment, beaucoup d'énergie sera dépensée en calculs, ce qui n'est pas nécessaire pour char.


Une autre question à propos de varchar est que puisque varchar peut s'adapter automatiquement à l'espace de stockage, le stockage de varchar(8) et varchar(255) devrait être le même, donc à chaque fois que la table est conçue, c'est mieux vaut aller dans une direction plus large lorsque vous en avez besoin, afin d'éviter de ne pas en avoir assez à l'avenir. Cette idée est-elle correcte ? La réponse est non. mysql mettra les informations de la table en mémoire (après la première requête, elles seront mises en cache, ce qui est évident sous Linux, mais ne semble pas l'être sous Windows, je ne sais pas pourquoi pour le moment, l'application mémoire). est basé sur une longueur fixe. Il y aura des problèmes si varchar est grand. Vous devriez donc toujours le demander sur demande.

Résumé : regardez attentivement la table de données DZ, les champs de longueur fixe utilisent toujours char....

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn