sql >> Base de Datos >  >> RDS >> Mysql

Almacenamiento de valores hash SHA1 en MySQL

Usaría VARCHAR para datos de longitud variable, pero no con datos de longitud fija. Porque un valor SHA-1 es siempre 160 bits de largo, el VARCHAR simplemente desperdiciaría un byte adicional para la longitud del fijo- campo de longitud .

Y tampoco almacenaría el valor SHA1 está regresando Porque usa solo 4 bits por carácter y, por lo tanto, necesitaría 160/4 =40 caracteres. Pero si usa 8 bits por carácter, solo necesitará un campo largo de 160/8 =20 caracteres.

Así que te recomiendo usar BINARY(20) y el UNHEX función para convertir el SHA1 valor a binario.

Comparé los requisitos de almacenamiento para BINARY(20) y 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
);

Con millones de registros binary(20) toma 44.56M, mientras que char(40) toma 64.57M.InnoDB motor.