SQL Uniqueidentifier hashbytes不匹配

时间:2015-08-10 06:58:00

标签: c# sql collation uniqueidentifier hashbytes

我有C#个应用程序,它建立了连接SQL Server 2014数据库。当我在Guid上创建C#时,它会通过lower case写入SQL。但是,当我在SQL上进行查询时,我会得到此值upper case。此Guid值需要SHA1进行哈希处理,而SQL返回不同的hashed value

是因为collation吗?

我使用Turkish_CI_AI

1 个答案:

答案 0 :(得分:3)

GUID是16字节二进制值,因此它们没有大小写。经常看到的多部分十六进制字符串只是GUID的文本表示之一。这意味着无论是大写还是小写都取决于格式代码而与实际值无关。这也意味着在比较GUID的任何文本表示时不应该考虑这种情况。

如果要散列Uniqueidentifier值,则应将其作为GUID检索,并通过调用Guid.ToByteArray来散列实际字节,而不是其文本表示。

最后,您应该考虑是否确实需要对GUID进行哈希处理。 GUID为128位长,而SHA1长度最小为160位。如果要计算哈希值以进行快速比较,最好只使用原始GUID。

如果要散列多字段消息,最好获取所有字段的字节并散列生成的字节数组