5

我有这个 MSSQL 片段 -

CONVERT(INT, HASHBYTES('MD5', {some_field}))

...而且我真的很想要一个 MySQL 等价物。我很确定这HASHBYTES('MD5', ...)和 MySQL 的一样MD5(...)——这CONVERT(INT, ...)让我很困惑。

谢谢。

4

1 回答 1

6

从该MD5()函数的 MySQL 手册条目中:

该值作为 32 个十六进制数字的字符串返回,或者NULL如果参数是NULL.

CONVERT()您在上面引用的 MSSQL函数varbinary通过截断到 4 个最低位字节将其参数转换为有符号的 32 位整数。这有点令人讨厌,因为 MySQL 算法的工作精度为 64 位。

因此,我们必须取 MySQL 十六进制表示的最右边的 8 位数字(表示 4 个最低位字节)并使用 MySQL 的CONV()函数转换为十进制,然后对结果进行符号扩展:

CONV(RIGHT(MD5('foo'),8), 16, 10) ^ 0x80000000 - 0x80000000
于 2012-08-29T15:26:15.140 回答