Użyłbym VARCHAR
dla danych o zmiennej długości, ale nie dla danych o stałej długości. Ponieważ wartość SHA-1 to zawsze 160-bitowy VARCHAR
zmarnowałby tylko dodatkowy bajt na długość stałej pole długości
.
Nie zapisałbym też wartości SHA1
powraca. Ponieważ używa tylko 4 bitów na znak, a zatem potrzebowałby 160/4 =40 znaków. Ale jeśli używasz 8 bitów na znak, potrzebujesz tylko pola o długości 160/8 =20 znaków.
Dlatego polecam użyć BINARY(20)
i UNHEX
funkcja
przekonwertować SHA1
wartość na binarną.
Porównałem wymagania dotyczące przechowywania dla BINARY(20)
i 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
);
Z milionem rekordów binary(20)
zajmuje 44,56 mln, podczas gdy char(40)
zajmuje 64.57M.InnoDB
silnik.