Hashbytes MD5语法

时间:2013-05-10 23:30:14

标签: hash sql-server-2012

为什么下面的散列结果会有所不同?它们不应该是一样的吗?

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

1 个答案:

答案 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'