MySQL中与MSSQL CONVERT()函数等效的函数是什么?

5

我有这样一个 MSSQL 片段 -

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

...我真的很希望有一个MySQL的等价物。我相信HASHBYTES('MD5', ...)部分与MySQL的MD5(...)相同 - 真正让我困惑的是CONVERT(INT, ...)部分。

谢谢。

1个回答

6

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

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

你引用的MSSQL CONVERT()函数将其varbinary参数转换为带符号的32位整数,通过截断为4个最低位字节实现。这有点麻烦,因为MySQL算术运算以64位精度工作。

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

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

遗憾的是,这似乎导致了零,这不是MSSQL产生的结果。 - Jez
@Jez:请看我的更新答案,位于上方。事实上,在安全应用中,您可能不应该这样做,因为在转换过程中您会失去75%的哈希值。 - eggyal
@Jez:我现在已经停止调整了!上一个版本返回的结果不正确,应该是正数。我认为这个版本是最优的。 - eggyal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接