代码之家  ›  专栏  ›  技术社区  ›  Sertan Pekel

SQL唯一标识符哈希字节不匹配

  •  0
  • Sertan Pekel  · 技术社区  · 9 年前

    我有 C# 连接的应用程序 SQL Server 2014 数据库当我创建 Guid 在…上 C类# ,它通过 lower case 。但当我查询 SQL ,我得到这个值 upper case Guid(指南) 值需要通过 SHA1 ,和作为 SQL语言 返回不同的 hashed value .

    是因为 collation ?

    我使用 Turkish_CI_AI .

    1 回复  |  直到 9 年前
        1
  •  3
  •   Panagiotis Kanavos    9 年前

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

    如果您想散列 Uniqueidentifier 值,应将其作为GUID检索,并通过调用 Guid.ToByteArray ,而不是其文本表示。

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

    如果要对多字段消息进行哈希,最好获取所有字段的字节并对结果字节数组进行哈希