【问题标题】:Why does Guid.ToString() reverse the byte order?为什么 Guid.ToString() 反转字节顺序?
【发布时间】:2008-08-20 09:44:02
【问题描述】:

我们将一些 Guid 存储在 MS SQL 数据库中。有一些遗留代码执行Guid.ToString(),然后将它们传递给varchar(64),还有一些更新的代码使用唯一标识符参数传递它们。当您使用 MS SQL Management Studio 查看结果时,它们看起来会有所不同。前三个块的字节顺序颠倒了,但最后一个块保持不变。为什么?

【问题讨论】:

    标签: .net sql-server


    【解决方案1】:

    Sql server 中的唯一标识符字段可以被索引,'backwards'也是如此。

    可以从机器特定信息和“事件时间”信息生成指南。

    .Net 中的默认 Guid 是随机的,但您可以通过外部调用从中获取顺序 Guid:

    [DllImport( "rpcrt4.dll", SetLastError = true )]
    static extern int UuidCreateSequential( out Guid guid );
    

    这将根据您的 MAC 地址 (MSDN docs) 为您提供连续的 Guid。

    如果您.ToString() 这些连续的 guid,那么您将看到字符串的第一部分发生变化,而其余部分保持不变。

    这使得 Guid 之间的相等性检查更快(因为差异将在开始时)并改善截断的变化。

    对于搜索列,SqlServer 以类似于电话簿或字典的方式构建索引。搜索以“Over*”开头的单词比查找以“*flow”结尾的单词要快得多。

    这意味着对于 Sql server,任何顺序的 Guid 都需要首先存储重复值,因此它将它们存储在前面。

    【讨论】:

      猜你喜欢
      • 2016-07-12
      • 1970-01-01
      • 2021-10-30
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多