sql >> Databasteknik >  >> RDS >> Mysql

Lagring av SHA1-hashvärden i MySQL

Jag skulle använda VARCHAR för data med variabel längd, men inte med data med fast längd. Eftersom ett SHA-1-värde alltid är 160 bitar lång, VARCHAR skulle bara slösa bort en extra byte för längden av den fasta- längdfält .

Och jag skulle inte heller lagra värdet SHA1 återvänder. Eftersom det bara använder 4 bitar per tecken och därför skulle behöva 160/4 =40 tecken. Men om du använder 8 bitar per tecken, skulle du bara behöva ett 160/8 =20 tecken långt fält.

Så jag rekommenderar dig att använda BINARY(20) och UNHEX funktion för att konvertera SHA1 värde till binärt.

Jag jämförde lagringskrav för BINARY(20) och 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
);

Med miljontals poster binary(20) tar 44,56 miljoner medan char(40) tar 64,57 miljoner.InnoDB motor.



  1. Slavning av en kraschad MySQL-masterserver i semisynkron replikeringsinställning

  2. postgresql-sekvens nextval i schema

  3. Hur uppdaterar jag om det finns, infogar om inte (AKA upsert or merge) i MySQL?

  4. NLSSORT() Funktion i Oracle