提问人:d4nt 提问时间:8/20/2008 最后编辑:Nizamd4nt 更新时间:12/20/2013 访问量:2561
为什么 Guid.ToString() 会颠倒字节顺序?
Why does Guid.ToString() reverse the byte order?
问:
我们将一些 Guid 存储在 MS SQL 数据库中。有一些遗留代码会这样做,然后将它们传递给 a,还有一些较新的代码使用唯一标识符参数将它们传递进来。当您使用 MS SQL Management Studio 查看结果时,它们看起来不同。前三个块的字节顺序相反,但最后一个块保持不变。为什么?Guid.ToString()
varchar(64)
答:
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 都需要首先使用重复值进行存储,因此它会从后到前存储它们。
评论