2.存储密码(或者说 md5),用 binary(16) 而不是 char(32)
一个 PHP 程序员第一次往数据库里存密码估计都是明码方式的,之后才知道 md5,而第一次存 md5 密码肯定都用的是 char(32) 或者 varchar(32),我甚至忽视了这个问题,很久后才意识到,应该用 binary(16)
比方说一个表只有 id、user、password 三个字段,你要创建个新用户,最终的 SQL 可能是这样:
INSERT INTO members SET user = "platinum", password = "202cb962ac59075b964b07152d234b70"
现在则应该这样:
INSERT INTO members SET user = "platinum", password = 0x202cb962ac59075b964b07152d234b70
就是说,你应该把一个 md5 串看成是 16 个 HEX 十六进制数,而非长度为 32 的英文数字混淆的字符串。在这里,好处仅仅是节省 16 个字节而已,但是以后,你会碰到需要用 guid 之类(而非自增长的整数 id)做主键的情况(举个例子,假设你写了个爬虫抓取整个 web,为了标识那无数的网址你只能用 md5 把它们缩短后作为主键),这时候效率会更明显,要知道,以二进制存储的时候,不需要考虑大小写、不需要考虑字符集,而且更适合被索引 hash。