我有这个 MSSQL 片段 -
CONVERT(INT, HASHBYTES('MD5', {some_field}))
...而且我真的很想要一个 MySQL 等价物。我很确定这HASHBYTES('MD5', ...)
和 MySQL 的一样MD5(...)
——这CONVERT(INT, ...)
让我很困惑。
谢谢。
我有这个 MSSQL 片段 -
CONVERT(INT, HASHBYTES('MD5', {some_field}))
...而且我真的很想要一个 MySQL 等价物。我很确定这HASHBYTES('MD5', ...)
和 MySQL 的一样MD5(...)
——这CONVERT(INT, ...)
让我很困惑。
谢谢。
从该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