在MySQL中保存密碼,我們需要使用一種特殊的類型,那就是CHAR(60)。
為什么要使用這個類型呢?原因如下:
- 首先,在MySQL的存儲和比較密碼時,需要密碼散列化的一種函數,通常我們使用的是
SHA2()
函數。這個函數需要的是一個字符串輸入,返回的是一個已經散列過的字符串,散列算法需要的長度是64個字符。 - 而
CHAR(60)
正好是64個字符的長度減去4個字符的空間,這4個字符是用來保存散列算法的類型的。
因此,我們通常會將用戶的密碼先使用SHA2函數進行散列化,然后保存在一個CHAR(60)格式的字段中。
CREATE TABLE users (
id INT(11) NOT NULL AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password CHAR(60) NOT NULL,
PRIMARY KEY (id)
);
需要注意的是,在使用CHAR(60)
保存密碼時,我們不能使用VARBINARY(64)
或者BLOB
格式,因為這些類型在字符集和排序方面的差異可能會對密碼散列產生影響。