1

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

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'
你好世界 87434a4b7918d288dc1c1e0ca7544e77 68e109f0f40ca72a15e05cc22786f8e6
4

1 回答 1

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'
于 2013-05-14T10:23:27.710 回答