我有一個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你絕對正確:)。你可以發佈一些鏈接,以瞭解爲什麼發生這種情況? –