我想要一个包含哈希或校验和的列作为比较记录的单个值。有可能在纯SQL中执行这样的操作吗?与PHP中的程序化解决方案相比,您认为这是实用的吗?
是的,这是可能的。MD5()
、SHA1()
和SHA2()
都是可用的散列函数。
您必须逐行、逐个查询地计算这些函数的值。例如,每次插入一行时,都必须插入哈希值,这样做:
INSERT INTO x
name=?name,
address=?address,
hash=MD5(CONCAT(?name,?address))
您需要在每次更新时执行类似的操作。如果你弄错了,这非常容易,尤其是当你的表结构发生变化时,你的哈希会变得更糟,而不是无用。
顺便说一句,MD5在身份验证方面不再是加密安全的。然而,对于封闭系统中的这种散列来说,这仍然是一个可以接受的选择。