web-dev-qa-db-fra.com

Quelle est la différence entre VARCHAR et CHAR?

Quelle est la différence entre VARCHAR et CHAR dans MySQL?

J'essaie de stocker des hachages MD5.

308
steven

VARCHAR est de longueur variable.

CHAR est une longueur fixe.

Si votre contenu a une taille fixe, vous obtiendrez de meilleures performances avec CHAR.

Voir la page MySQL sur Types CHAR et VARCHAR pour une explication détaillée (veillez également à lire les commentaires).

307
Anon.

CARBONISER

  1. Utilisé pour stocker une valeur de chaîne de caractères de longueur fixe .
  2. Le maximum non. Le type de données que le type de données peut contenir est 255 caractères .
  3. C'est 50% plus rapide que VARCHAR.
  4. Utilise allocation de mémoire statique .

VARCHAR

  1. Utilisé pour stocker longueur variable données alphanumériques.
  2. Ce type de données ne peut contenir plus de
    • Pre-MySQL 5.0.3: 255 caractères .
    • Post-MySQL 5.0.3: 65 535 caractères partagé pour la ligne.
  3. C'est plus lent que CHAR.
  4. Usages allocation de mémoire dynamique * .
195
Rahul Bhadana

CHAR Vs VARCHAR

CHAR est utilisé pour la taille variable de longueur fixe
VARCHAR est utilisé pour Variable Length Size Variable.

Par exemple.

Create table temp
(City CHAR(10),
Street VARCHAR(10));

Insert into temp
values('Pune','Oxford');

select length(city), length(street) from temp;

La sortie sera

length(City)          Length(street)
10                    6

Conclusion: Pour utiliser efficacement l'espace de stockage, il faut utiliser VARCHAR. Au lieu de cela, CHAR si la longueur variable est variable.

109
P Sharma

Une colonne CHAR(x) ne peut contenir que des caractères exactement x.
Une colonne VARCHAR(x) peut avoir jusqu’à x.

Étant donné que vos hachages MD5 auront toujours la même taille, vous devriez probablement utiliser un CHAR.

Cependant, vous ne devriez pas utiliser MD5 en premier lieu; il a des faiblesses connues.
Utilisez SHA2 à la place.
Si vous hachez des mots de passe, vous devriez utiliser bcrypt.

59
SLaks

Varchar supprime les espaces de fin si les caractères entrés sont plus courts que la longueur déclarée, mais pas les caractères. Char remplira les espaces et sera toujours la longueur de la longueur déclarée. En termes d’efficacité, varchar est plus efficace, car il réduit les caractères pour permettre plus d’ajustements. Cependant, si vous connaissez la longueur exacte de char, char s'exécutera avec un peu plus de vitesse. 

Pour plus de détails à ce sujet, consultez:

http://www.allthingsdiscussed.com/More/Difference-between-char-and-varchar-in-mysql

8
user1445657

Quelle est la différence entre VARCHAR et CHAR dans MySQL?

Pour avoir déjà donné des réponses, je voudrais ajouter que, dans _OLTP systems ou dans les systèmes avec mises à jour fréquentes, envisagez d'utiliser CHAR même pour des colonnes de taille variable en raison d'une possible fragmentation de la colonne VARCHAR lors des mises à jour.

J'essaie de stocker des hachages MD5.

Le hash MD5 n'est pas le meilleur choix si la sécurité compte vraiment. Cependant, si vous souhaitez utiliser une fonction de hachage, considérez plutôt le type BINARY (par exemple, MD5 produira un hachage de 16 octets, de sorte que BINARY(16) serait suffisant au lieu de CHAR(32) pour 32 caractères représentant des chiffres hexadécimaux. Cela permettrait d'économiser davantage d'espace et d'optimiser les performances .

8
Grygoriy Gonchar

Dans la plupart des SGBDR actuels, ils sont synonymes. Cependant, pour les systèmes qui ont encore une distinction, un champ CHAR est stocké en tant que colonne de largeur fixe. Si vous le définissez comme CHAR (10), 10 caractères sont écrits dans la table, où "padding" (généralement des espaces) est utilisé pour remplir tout espace non utilisé par les données. Par exemple, enregistrer "bob" serait enregistré comme ("bob" +7 espaces). Une colonne VARCHAR (caractère variable) est destinée à stocker des données sans gaspiller l'espace supplémentaire d'une colonne CHAR.

Comme toujours, Wikipedia parle plus fort.

5
mobiGeek

CHAR est un champ de longueur fixe; VARCHAR est un champ de longueur variable. Si vous stockez des chaînes avec une longueur extrêmement variable telle que des noms, utilisez un VARCHAR, si la longueur est toujours la même, utilisez un CHAR car il est légèrement plus efficace en taille et également plus rapide.

4
Andrew

CHAR est de longueur fixe et VARCHAR est de longueur variable. CHAR utilise toujours la même quantité d'espace de stockage par entrée, tandis que VARCHAR utilise uniquement la quantité nécessaire pour stocker le texte réel.

2
Donnie DeBoer

Le caractère est un type de données de caractère de longueur fixe et varchar est un type de données de caractère de longueur variable.

Étant donné que char est un type de données de longueur fixe, la taille de stockage de la valeur char est égale à la taille maximale de cette colonne. Comme varchar est un type de données de longueur variable, la taille de stockage de la valeur varchar est la longueur réelle des données entrées, et non la taille maximale de cette colonne.

Vous pouvez utiliser char lorsque les entrées de données d'une colonne doivent avoir la même taille . Vous pouvez utiliser varchar lorsque la taille des entrées de données d'une colonne doit varier considérablement.

2
Bob Minteer

selon High Performance MySQL book: 

VARCHAR stocke des chaînes de caractères de longueur variable. Il s'agit du type de données de chaîne le plus courant. Cela peut nécessiter moins d'espace de stockage que types de longueur fixe, car il n’utilise que l’espace nécessaire (c’est-à-dire que moins d’espace est utilisé pour stocker des valeurs plus courtes). L'exception est un Table MyISAM créée avec ROW_FORMAT = FIXED, qui utilise un montant fixe d'espace sur le disque pour chaque ligne et peut donc gaspiller de l'espace VARCHAR aideperformance car il économise de l'espace. 

CHAR a une longueur fixe: MySQL alloue toujours assez d'espace pour le nombre de caractères spécifié. Lorsque vous stockez une valeur CHAR, MySQL supprime tous les espaces de fin. (Cela était également vrai de VARCHAR dans MySQL 4.1 et versions antérieures - CHAR et VAR CHAR étaient logiquement identiques et ne différaient que par le format de stockage.) Les valeurs sont complétées par des espaces comme. nécessaire pour les comparaisons.