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.