CHAR over VARCHAR存储密码有什么好处吗?
我追求高低,却找不到任何东西。
我问,因为我被告知要使用CHAR作为密码,并对此感到好奇。
答案 0 :(得分:2)
您的密码是否有最大长度限制?如果他们这样做,您就不需要varchar
。
在任何情况下,如果您要存储密码,您应该对它们进行散列并存储散列。许多散列算法都是固定大小的,所以我不认为char应该是一个问题。只需分配适当数量的字符。
无论你做什么,一定要哈希吧!
答案 1 :(得分:2)
安全性没有区别。不同之处在于存储机制。
来自MySQL manual:
下表通过显示将各种字符串值存储到CHAR(4)和VARCHAR(4)列中的结果(假设该列使用单字节字符集,如latin1)来说明CHAR和VARCHAR之间的差异。
Value CHAR(4) Storage Required VARCHAR(4) Storage Required
'' '' 4 bytes '' 1 byte
'ab' 'ab ' 4 bytes 'ab' 3 bytes
'abcd' 'abcd' 4 bytes 'abcd' 5 bytes
'abcdefgh' 'abcd' 4 bytes 'abcd' 5 bytes
因此,如果您存储的字符串的长度是可变的,那么您可以看到VARCHAR
是有益的。 CHAR
经常用于密码字段的原因是因为无论输入的长度如何,散列算法的输出都是一致的。由于您存储的是用户密码的哈希值,而不是密码本身,因此字段长度将保持一致。
leeor建议您散列密码是正确的。 PHP The Right Way是这方面最佳做法的良好资源。