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

时间:2008-08-20 09:44:03

标签: .net sql-server

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

1 个答案:

答案 0 :(得分:8)

Sql server中的Uniqueidentifier字段可以被索引,因此是“向后”。

Guids可以通过机器特定信息和“事件时间”信息生成。

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

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

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

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

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

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

这意味着对于Sql server,任何顺序Guids都需要先存储重复值,因此它会将它们存储回来。