Бих използвал 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
двигател.