我有这个MSSQL片段-

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

...而且我真的很想要MySQL等效产品。我很确定HASHBYTES('MD5', ...)位与MySQL的MD5(...)是相同的-CONVERT(INT, ...)位确实让我感到困惑。

谢谢。

最佳答案

从MySQL手动输入的 MD5() 函数:



您上面引用的MSSQL CONVERT() 函数通过将其截断为4个最低顺序字节将其varbinary参数转换为带符号的32位整数。这有点麻烦,因为MySQL算术可以达到64位精度。

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

CONV(RIGHT(MD5('foo'),8), 16, 10) ^ 0x80000000 - 0x80000000

10-06 08:49
查看更多