我有一个SQL Server 2008 R2中包含两个字段(WordHash,Word)的表。在C#中生成这个Hash
字段,我需要在sql server中重新生成Word
字段的哈希码。为什么在sql server中生成的MD5哈希不相等?
但我的问题是,在sql server和C#中生成的MD5哈希是不同的。我发现下面的代码来解决这个问题,但我仍然有同样的问题。
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
不同,而他们从相同的代码生成!?
如果你'N'some word'',而不只是''一些word''做的结果变成一样吗? –
这只是一个猜测,但我怀疑''Analytics''文字和'[Word]'值是用不同的编码处理的,这可能确实会在散列输出中产生差异。一个可能是unicode,而另一个不是。 – David
@ScottChamberlain你绝对正确:)。你可以发布一些链接,以了解为什么发生这种情况? –