【发布时间】:2022-01-23 06:53:06
【问题描述】:
知道为什么 SQL Server 和 Oracle 中的两个散列函数在散列不间断空格字符时会产生不同的结果吗?
Oracle select standard_hash('a ', 'MD5') from dual; 导致 25EF28EB5A5BE667C6222418E9E27E8E 与 SQL select HASHBYTES ('MD5','a '); 不匹配导致 CE8F03020C81133B3A082F8051EB9FF6。注意输入 'a' 后面的空格是一个不间断的空格字符。
有什么好的资料可以说明差异吗?
【问题讨论】:
-
从文档中,“可选的方法参数让您指定要使用的哈希算法的名称。有效的算法是 SHA1、SHA256、SHA384、SHA512 和 MD5。如果省略此参数,则使用 SHA1”SS 是否使用相同?
-
“请注意输入 'a' 后面的空格是一个不间断的空格字符。” 与其说明这一点,不如包括实际再现该字符的代码,例如as
'a' + CONVERT(varchar(1),0xA0) -
相同的排序规则?
-
我粘贴了不间断的空格字符,所以不需要手动编码。
-
@OldProgrammer,我在两边都指定了“MD5”,但顺便说一下,SHA2-512 或任何散列算法也会出现同样的分歧。
标签: sql-server oracle hash