标签: mysql sql-server
我有这个MSSQL片段 -
CONVERT(INT, HASHBYTES('MD5', {some_field}))
...我真的很喜欢MySQL等价物。我很确定HASHBYTES('MD5', ...)位与MySQL的MD5(...)相同 - 它是CONVERT(INT, ...)位,这让我很困惑。
HASHBYTES('MD5', ...)
MD5(...)
CONVERT(INT, ...)
感谢。
答案 0 :(得分:6)
来自MD5()功能的MySQL手册条目:
MD5()
该值以32个十六进制数字的字符串形式返回,如果参数为NULL,则返回NULL。
NULL
上面引用的MSSQL CONVERT()函数将其varbinary参数转换为带符号的32位整数,方法是截断为4个最低位字节。这有点令人讨厌,因为MySQL算法可以达到64位精度。
CONVERT()
varbinary
因此,我们必须使用MySQL的十六进制表示的最右边8位数(表示4个最低位字节)并使用MySQL的CONV()函数转换为十进制,然后对结果进行符号扩展:
CONV()
CONV(RIGHT(MD5('foo'),8), 16, 10) ^ 0x80000000 - 0x80000000