Hashbytes MD5语法

Hashbytes MD5语法,hash,sql-server-2012,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]='HelloWor

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

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我可以重现这一点,您的列似乎存储的是NVARCHAR而不是VARCHAR(这是您在查询中指定的字符串),它们的存储方式不同,因此会给出不同的结果

如果运行以下查询,则在使用相同的数据类型(NVARCHAR)时,应该会看到它们是相同的:


我可以重现这一点,您的列似乎存储的是NVARCHAR而不是VARCHAR(这是您在查询中指定的字符串),它们的存储方式不同,因此会给出不同的结果

如果运行以下查询,则在使用相同的数据类型(NVARCHAR)时,应该会看到它们是相同的:

HelloWorld 87434a4b7918d288dc1c1e0ca7544e77 68e109f0f40ca72a15e05cc22786f8e6
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'