mySQL:获取每一行的哈希值?

dhr*_*hrm 12 mysql hash

目前我手动创建一个字符串,我连接表中每一行的所有值.我正在为每一行散列此字符串以获取该行的当前值(/ status)的哈希值,我稍后将使用该哈希值来确定该行是否已更改.

而不是手动执行此操作,是否有一种内置方式,我的mySQL为每一行获取一个唯一的哈希值?

Mar*_*c B 22

你可以做点什么

SELECT MD5(concat(field1, field2, field3, ...)) AS rowhash
Run Code Online (Sandbox Code Playgroud)

但你无法摆脱列出你想要的字段,因为concat(*)这不是一个选项(语法错误).

  • 如果其中一个字段为 NULL,则此方法将不起作用。您应该对可为 NULL 的字段使用 COALESCE(fieldX, 'some_NULL_placeholder') 。 (3认同)
  • @aderchox CONCAT_WS() 与 CONCAT() 不同;-) 如果任何参数为 NULL,CONCAT() 返回 NULL。https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_concat (2认同)

Fra*_*ank 6

最好使用 concat_ws()。例如两个相邻列: 12,3 => 1,23 。

抱歉,这仍然存在一些问题。想想 null 值、空字符串、字符串可以包含 ',' 等......

需要一个程序来生成哈希语句,该语句应将 null 替换为特定值(对于可以为 null 的列),并使用很少使用的字符/字节作为分隔符。