mysql - 是否可以在数据输入时创建由其他列值组成的散列并将其存储在一起?

标签 mysql

例如输入的数据可能是 name , home_addresshash as

+--+----+---------+-----------------------------------------+
|id|name|phone    |hash                                     |
+-----------------------------------------------------------+
|1 |Joe |123123123|dfaf41c21afbe359228c5a0ed1095b30ff4f50ac |
+-----------------------------------------------------------+
|2 |Doe |123123332|0fd7083d2af4624c531e8fc937d7a9c945f7ef32 |
+--+----+---------+-----------------------------------------+

是否可以在输入记录时生成两者的哈希值(namephone)并仅使用 将哈希值存储为哈希列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/

相关文章:

mysql - SQL 查询从选择查询的输出插入到特定列

php - 如何根据 MySQL 数据库中的年龄过滤结果

mysql - 使用 UPDATE 改造增量 ID 列

mysql - 轨道 3 : Search in a query result

mysql - CONCAT 和 LIMIT 的 SQL 版本

php页面无响应

MySQL - 在一个具有连接 ID 的表中选择多行

插入后和更新后的 MySQL 触发器

php - 连接 POS 到电子商务 RESTFUL API

php mysql 在 URL 中删除单词 GET ERROR