我的一位同事给我发了一个有趣的问题,我无法完全解释。
他运行了一些代码(包括在下面)并从中得到了一些意想不到的结果。
本质上,当将 a UniqueIdentifier
(Guid
从这里开始我将称之为)转换为 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的第一部分是向后的,然后是第二部分,然后是第三部分,但是这些部分的顺序是保留的。之后,最后两个部分按照它们在.Guid
Guid
谁能解释一下?(下面包含一个更大的测试集。)
代码:
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)