Maison >base de données >tutoriel mysql >Pour stocker un hachage SHA1 dans MySQL : VARCHAR ou BINARY ?

Pour stocker un hachage SHA1 dans MySQL : VARCHAR ou BINARY ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-23 22:33:14559parcourir

To Store a SHA1 Hash in MySQL: VARCHAR or BINARY?

Stockage des valeurs de hachage SHA1 dans MySQL : VARCHAR vs. BINARY

Lors du stockage du résultat d'un hachage SHA1 dans une base de données MySQL, le le type et la longueur du champ doivent être soigneusement examinés. Contrairement à la pratique courante, utiliser un champ VARCHAR à cette fin est inefficace.

VARCHAR vs. BINARY

Un hachage SHA1 fait toujours 160 bits. Les champs VARCHAR sont conçus pour des données de longueur variable, mais ils introduisent une surcharge d'un octet pour la longueur du champ. Par conséquent, il n'est pas nécessaire d'utiliser VARCHAR pour une valeur de longueur fixe, telle qu'un hachage SHA1.

Les champs binaires, en revanche, stockent les données binaires sans aucune surcharge. Ils sont idéaux pour les valeurs de longueur fixe comme les hachages SHA1.

Représentation des caractères

Les hachages SHA1 sont généralement représentés sous forme de chaînes hexadécimales, qui utilisent 4 bits par caractère. Pour stocker la représentation hexadécimale d'un hachage SHA1 dans un champ VARCHAR, il faudrait 160/4 = 40 caractères. Cependant, les champs binaires utilisent 8 bits par caractère, ce qui permet de stocker le même hachage dans un champ 160/8 = 20 caractères.

Approche recommandée

C'est Il est recommandé d'utiliser BINARY(20) pour stocker les valeurs de hachage SHA1 dans MySQL. Ce type de champ élimine la surcharge associée à VARCHAR et permet de stocker efficacement le hachage. De plus, la fonction UNHEX peut être utilisée pour convertir la représentation hexadécimale du hachage en binaire avant de le stocker dans la base de données.

Comparaison de stockage

Une comparaison des exigences de stockage révèle que BINARY(20) est plus efficace que CHAR(40) pour stocker les valeurs de hachage SHA1. Par exemple, avec des millions d'enregistrements, BINARY(20) nécessite environ 44,56 Mo de stockage, tandis que CHAR(40) en nécessite 64,57 Mo. Cette différence devient encore plus prononcée avec des ensembles de données plus volumineux.

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