Бих използвал VARCHAR за данни с променлива дължина, но не и с данни с фиксирана дължина. Тъй като стойността на SHA-1 е винаги 160-битова дължина, VARCHAR просто би загубил допълнителен байт за дължината на фиксираната- поле за дължина
.
И също така не бих съхранил стойността SHA1
се завръща. Тъй като използва само 4 бита на знак и по този начин ще има нужда от 160/4 =40 знака. Но ако използвате 8 бита на знак, ще ви трябва само поле с дължина 160/8 =20 знака.
Затова ви препоръчвам да използвате BINARY(20)
и UNHEX функция
за да конвертирате SHA1 стойност в двоична.
Сравних изискванията за съхранение за BINARY(20) и 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
);
С милиони записи binary(20) отнема 44,56M, докато char(40) отнема 64,57 млн.InnoDB двигател.