【发布时间】:2014-04-16 16:49:42
【问题描述】:
我在 SQL Server 2008 R2 中有一个表,其中包含两个字段(WordHash、Word)。这个Hash字段是用C#生成的,我需要为sql server中的Word字段重新生成哈希码。
但我的问题是在 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'而不是'some word',结果会不会一样? -
这只是一个猜测,但我怀疑
'Analytics'文字和[Word]值使用不同的编码处理,这可能确实会在哈希输出中产生差异。一个可能是 unicode,而另一个不是。 -
@ScottChamberlain 你说得对:)。您可以发布一些链接以了解发生这种情况的原因吗?
-
@ScottChamberlain - 这个问题比您标记为重复的其他问题更早提出。我想另一个问题应该比这个问题标记为重复。
-
@Abhishekkumar 这不是这个网站的运作方式,它不是“最老的获胜”,而是“最好的获胜”。我找到了另一个问题,我记得在这里回答了相同的问题,我将其标记为重复,以将未来的访问者指向更好、更新的问题和答案。看到元讨论“Should I vote to close a duplicate question, even though it's much newer, and has more up to date answers?”,cons 是:不,你应该关闭旧的。
标签: c# sql-server hash md5