Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Speichern von SHA1-Hash-Werten in MySQL

Ich würde VARCHAR verwenden für Daten mit variabler Länge, aber nicht für Daten mit fester Länge. Weil ein SHA-1-Wert immer ist 160 Bit lang, der VARCHAR würde nur ein zusätzliches Byte für die Länge des Fixed- Längenfeld .

Und ich würde auch nicht den Wert SHA1 kehrt zurück. Weil es nur 4 Bit pro Zeichen verwendet und somit 160/4 =40 Zeichen benötigen würde. Aber wenn Sie 8 Bit pro Zeichen verwenden, brauchen Sie nur ein 160/8 =20 Zeichen langes Feld.

Daher empfehle ich Ihnen, BINARY(20) zu verwenden. und der UNHEX Funktion um den SHA1 zu konvertieren Wert in binär.

Ich habe die Speicheranforderungen für BINARY(20) verglichen und 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
);

Mit Millionen Datensätzen binary(20) dauert 44,56 MB, während char(40) benötigt 64,57 M.InnoDB Motor.