为什么下面的散列结果会有所不同?它们不应该是一样的吗?
SELECT [teststring]
, SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', [teststring])), 3, 32)
, SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)
FROM [test]
WHERE [teststring]='HelloWorld'
HelloWorld 87434a4b7918d288dc1c1e0ca7544e77 68e109f0f40ca72a15e05cc22786f8e6
答案 0 :(得分:1)
我可以重现这一点,看来您的列存储的是NVARCHAR而不是VARCHAR(这是您在查询中指定字符串的那些),这些存储方式不同,因此会产生不同的结果。
如果运行以下查询,则在使用相同的数据类型(NVARCHAR)时应该看到它们是相同的:
SELECT [teststring]
, SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', [teststring])), 3, 32)
, SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', N'HelloWorld')), 3, 32)
FROM [test]
WHERE [teststring]='HelloWorld'