对于可变长度的数据,我会使用VARCHAR
,但对于固定长度的数据,我不会使用VARCHAR
.因为SHA-1的值是always 160位长,VARCHAR
只会浪费an additional byte for the length of the fixed-length field位.
我也不会存储SHA1
返回的值.因为它每个字符只使用4位,因此需要160/4=40个字符.但如果每个字符使用8位,则只需要160/8=20个字符长的字段.
所以我建议您使用BINARY(20)
和UNHEX
function将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)
万张时,binary(20)
张需要4456万张,而char(40)
张需要6457万张.