为记录的字段值生成校验和或哈希


Generating a checksum or hash for field values of a record

我想要一个包含哈希或校验和的列作为比较记录的单个值。有可能在纯SQL中执行这样的操作吗?与PHP中的程序化解决方案相比,您认为这是实用的吗?

是的,这是可能的。MD5()SHA1()SHA2()都是可用的散列函数。

您必须逐行、逐个查询地计算这些函数的值。例如,每次插入一行时,都必须插入哈希值,这样做:

INSERT INTO x
       name=?name,
       address=?address,
       hash=MD5(CONCAT(?name,?address))

您需要在每次更新时执行类似的操作。如果你弄错了,这非常容易,尤其是当你的表结构发生变化时,你的哈希会变得更糟,而不是无用。

顺便说一句,MD5在身份验证方面不再是加密安全的。然而,对于封闭系统中的这种散列来说,这仍然是一个可以接受的选择。