SQL Uniqueidentifier hashbytes does not match

本文关键字:not match does hashbytes Uniqueidentifier SQL | 更新日期: 2023-09-27 18:07:04

我有C#应用程序连接SQL Server 2014数据库。当我在C#上创建Guid时,它通过lower case写入SQL。但是当我查询SQL时,我得到这个值upper case。这个Guid值需要被SHA1散列,因为SQL返回不同的hashed value

是因为collation吗?

我用Turkish_CI_AI

SQL Uniqueidentifier hashbytes does not match

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

如果你想散列一个Uniqueidentifier值,你应该检索它作为GUID,并通过调用GUID散列实际字节。ToByteArray,而不是它的文本表示。

最后,您应该考虑是否真的需要散列GUID。GUID长度为128位,SHA1长度至少为160位。如果希望计算一个散列值以进行快速比较,那么最好直接使用原始GUID。

如果您想要散列一个多字段的消息,最好是获取所有字段的字节并散列结果字节数组