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

Stockage des valeurs de hachage SHA1 dans MySQL

J'utiliserais VARCHAR pour les données de longueur variable, mais pas pour les données de longueur fixe. Parce qu'une valeur SHA-1 est toujours 160 bits de long, le VARCHAR gaspillerait simplement un octet supplémentaire pour la longueur du champ longueur .

Et je ne stockerais pas non plus la valeur SHA1 revient. Parce qu'il n'utilise que 4 bits par caractère et aurait donc besoin de 160/4 =40 caractères. Mais si vous utilisez 8 bits par caractère, vous n'aurez besoin que d'un champ de 160/8 =20 caractères.

Je vous recommande donc d'utiliser BINARY(20) et le UNHEX fonction pour convertir le SHA1 valeur en binaire.

J'ai comparé les exigences de stockage pour BINARY(20) et CHAR(40) .

CREATE TABLE `binary` (
    `id` int unsigned auto_increment primary key,
    `password` binary(20) not null
);
CREATE TABLE `char` (
    `id` int unsigned auto_increment primary key,
    `password` char(40) not null
);

Avec des millions d'enregistrements binary(20) prend 44.56M, tandis que char(40) prend 64.57M.InnoDB moteur.