相关疑难解决方法(0)

SQL Server UniqueIdentifier / GUID 内部表示

我的一位同事给我发了一个有趣的问题,我无法完全解释。

他运行了一些代码(包括在下面)并从中得到了一些意想不到的结果。

本质上,当将 a UniqueIdentifierGuid从这里开始我将称之为)转换为 a binary(or varbinary) 类型时,结果的前半部分的顺序是倒序的,但后半部分不是。

我的第一个想法是系统的字节序是原因,并且Guid保留了显示,但binary不能保证形式。

显然这是一个实现细节,但我想知道是否有一个很好的解释。

代码:

declare @guid uniqueidentifier = '8A737954-CBEC-40CE-A534-2AFFB5A0E207';
declare @binary binary(16) = (select convert(binary(16), @guid));
select @guid as [GUID], @binary as [Binary];
Run Code Online (Sandbox Code Playgroud)

结果:

GUID                                 Binary
8A737954-CBEC-40CE-A534-2AFFB5A0E207 0x5479738AECCBCE40A5342AFFB5A0E207
Run Code Online (Sandbox Code Playgroud)

如您所见,每个部分的前半部分Guid(一直到40CE)是向后存储的。也就是说,the的第一部分是向后的,然后是第二部分,然后是第三部分,但是这些部分的顺序是保留的。之后,最后两个部分按照它们在.GuidGuid

谁能解释一下?(下面包含一个更大的测试集。)

代码:

declare @guid_to_binary table
(
    [id] int identity(1,1),
    [guid] uniqueidentifier,
    [binary_conversion] binary(16)
);
declare @i int = 1;
while @i <= 100
begin
    insert into …
Run Code Online (Sandbox Code Playgroud)

sql-server uniqueidentifier sql-server-2014 uuid

18
推荐指数
1
解决办法
4086
查看次数