为什么 Guid.ToString() 会颠倒字节顺序?

Why does Guid.ToString() reverse the byte order?

提问人:d4nt 提问时间:8/20/2008 最后编辑:Nizamd4nt 更新时间:12/20/2013 访问量:2561

问:

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

.NET SQL 服务器

评论


答:

9赞 Keith 8/20/2008 #1

Sql Server 中的唯一标识符字段可以编制索引,因此是“向后”的。

可以从计算机特定信息和“事件时间”信息生成 Guid。

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

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

这将根据连续的 MAC 地址(MSDN 文档)获取 Guid。

如果你使用这些顺序的 guid,那么你会看到字符串的第一部分有所不同,而其余部分保持不变。.ToString()

这样可以更快地进行 Guid 之间的相等性检查(因为差异将在开始时出现),并改进了截断 Guid 的变化。

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

这意味着,对于 SQL Server,任何顺序 Guid 都需要首先使用重复值进行存储,因此它会从后到前存储它们。