sql server中生成的MD5哈希值不相等
本文关键字:MD5 哈希值 不相等 server sql | 更新日期: 2023-09-27 17:49:47
我在SQL Server 2008 R2中有一个包含两个字段(wordash, Word)的表。这个Hash
字段在c#中生成,我需要在sql server中为Word
字段重新生成哈希码。
但是我的问题是生成MD5哈希在sql server和c#是不同的。我找到下面的代码来解决这个问题,但我仍然有同样的问题。
SQL代码:CONVERT(NVARCHAR(32),HASHBYTES('MD5', 'some word'), 2)
将这个代码块放入我的查询后,我看到了一些奇怪的结果!这是我的结果:
我的查询:
SELECT
[WordHash],
convert(nvarchar(32),HASHBYTES('MD5', 'Analytics'),2) AS TestHash,
convert(nvarchar(32),HASHBYTES('MD5', [Word]),2) AS SqlHash
FROM myTable
结果:WordHash: A768CAA988605A2846599CF7E2D0C26A
TestHash: A768CAA988605A2846599CF7E2D0C26A
SqlHash F4AFA5FEF805F7F5163EC6402BAF61FF
请注意,'Analytics'
是数据库中的记录数据之一。
为什么是TestHash
&SqlHash
是不同的,而他们从相同的代码生成!?
问题是NVARCHAR
和VARCHAR
被散列到不同的值。HASHBYTES('MD5', 'Analytics'),
和[WordHash]
都是VARCHAR
的哈希值,但[Word]
是NVARCHAR
的哈希值。
select HASHBYTES('MD5', 'Analytics'), 'varchar'
union
select HASHBYTES('MD5', N'Analytics'), 'nvarchar'
--outputs
------------------------------------- --------
0xA768CAA988605A2846599CF7E2D0C26A varchar
0xF4AFA5FEF805F7F5163EC6402BAF61FF nvarchar
要解决这个问题,您必须将[Word]
更改为VARCHAR
或使用NVARCHAR
的值重新计算[WordHash]
。
一些有用的进一步阅读:比较SQL Server HASHBYTES函数和。net哈希