Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Armazenando valores de hash SHA1 no MySQL


Eu usaria VARCHAR para dados de comprimento variável, mas não com dados de comprimento fixo. Como um valor SHA-1 é sempre 160 bits, o VARCHAR apenas desperdiçaria um byte adicional para o comprimento do fixo- campo de comprimento .

E eu também não armazenaria o valor do SHA1 está voltando. Porque ele usa apenas 4 bits por caractere e, portanto, precisaria de 160/4 =40 caracteres. Mas se você usar 8 bits por caractere, precisará apenas de um campo de 160/8 =20 caracteres.

Portanto, recomendo que você use BINARY(20) e o UNHEX função para converter o SHA1 valor para binário.

Comparei os requisitos de armazenamento para BINARY(20) e 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
);

Com milhões de registros binary(20) leva 44,56M, enquanto char(40) leva 64,57 M.InnoDB motor.