代码之家  ›  专栏  ›  技术社区  ›  d4nt

为什么guid.toString()会颠倒字节顺序?

  •  8
  • d4nt  · 技术社区  · 16 年前

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

    1 回复  |  直到 11 年前
        1
  •  8
  •   Keith    16 年前

    SQL Server中的唯一标识符字段可以被索引,因此“向后”也是如此。

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

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

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

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

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

    这使得guid之间的相等性检查更快(因为差异将在开始时出现),并改进截断的差异。

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

    这意味着,对于SQL Server来说,任何顺序的guid都需要首先用重复值存储,因此它将它们存储在前面。