我有C#
个应用程序,它建立了连接SQL Server 2014
数据库。当我在Guid
上创建C#
时,它会通过lower case
写入SQL。但是,当我在SQL
上进行查询时,我会得到此值upper case
。此Guid
值需要SHA1
进行哈希处理,而SQL
返回不同的hashed value
。
是因为collation
吗?
我使用Turkish_CI_AI
。
答案 0 :(得分:3)
GUID是16字节二进制值,因此它们没有大小写。经常看到的多部分十六进制字符串只是GUID的文本表示之一。这意味着无论是大写还是小写都取决于格式代码而与实际值无关。这也意味着在比较GUID的任何文本表示时不应该考虑这种情况。
如果要散列Uniqueidentifier
值,则应将其作为GUID检索,并通过调用Guid.ToByteArray来散列实际字节,而不是其文本表示。
最后,您应该考虑是否确实需要对GUID进行哈希处理。 GUID为128位长,而SHA1长度最小为160位。如果要计算哈希值以进行快速比较,最好只使用原始GUID。
如果要散列多字段消息,最好获取所有字段的字节并散列生成的字节数组