例如输入的数据可能是 name
, home_address
和 hash
as
+--+----+---------+-----------------------------------------+
|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
。
关于mysql - 是否可以在数据输入时创建由其他列值组成的散列并将其存储在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25386281/