Mysql
 sql >> Database >  >> RDS >> Mysql

Memorizzazione dei valori hash SHA1 in MySQL

Userei VARCHAR per dati a lunghezza variabile, ma non con dati a lunghezza fissa. Perché un valore SHA-1 è sempre Lungo 160 bit, il VARCHAR sprecherebbe solo un byte aggiuntivo per la lunghezza del fixed- campo di lunghezza .

E inoltre non memorizzerei il valore SHA1 sta tornando. Perché utilizza solo 4 bit per carattere e quindi richiederebbe 160/4 =40 caratteri. Ma se usi 8 bit per carattere, avresti bisogno solo di un campo lungo 160/8 =20 caratteri.

Quindi ti consiglio di usare BINARY(20) e UNHEX funzione per convertire il SHA1 valore in binario.

Ho confrontato i requisiti di archiviazione per 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
);

Con milioni di record binary(20) richiede 44,56 milioni, mentre char(40) richiede 64,57 milioni.InnoDB motore.