例如,输入的数据可能是name
, home_address
和hash
+--+----+---------+-----------------------------------------+
|id|name|phone |hash |
+-----------------------------------------------------------+
|1 |Joe |123123123|dfaf41c21afbe359228c5a0ed1095b30ff4f50ac |
+-----------------------------------------------------------+
|2 |Doe |123123332|0fd7083d2af4624c531e8fc937d7a9c945f7ef32 |
+--+----+---------+-----------------------------------------+
是否有可能在输入记录时生成两个(name
和phone
)的哈希值,并仅使用mySQL
作为哈希列上的哈希值存储?
我可以脚本这种行为,但我想知道是否有可能在mySQL上这样做。
任何帮助或建议都是非常感谢的。
谢谢!
MySQL内置函数SHA1()
返回40位十六进制哈希值:
SELECT SHA1('mystring');
输出: 9ce3ea4d6fac2165933b3971e6d5a13753c7d878
你可以这样连接你的值:
SELECT SHA1(CONCAT(name, phone));
插入时:
INSERT INTO table1 (name, phone, hash)
VALUES ('Joe', '123123123', SHA1(CONCAT('Joe', '123123123')));
更新所有行:
UPDATE table1
SET hash = SHA1(CONCAT(name, phone));
提示:如果您以十六进制表示形式存储值,请选择单个字节字符集,如ascii
,特别是如果您计划对列进行索引。utf8
索引的大小是它的3倍。此外,像SHA1这样的散列算法总是输出相同长度的散列,因此考虑使用CHAR
列而不是VARCHAR
列。