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.