SQL Server UniqueIdentifier / GUID内部表示
我的一个同事给我发了一个有趣的问题,我无法完全解释。 他运行了一些代码(包括在下面),并从中获得了一些意外的结果。 本质上,将UniqueIdentifier(从现在开始,我将其称为)类型Guid转换为binary(或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]; 结果: GUID Binary 8A737954-CBEC-40CE-A534-2AFFB5A0E207 0x5479738AECCBCE40A5342AFFB5A0E207 如您所见,Guid(一直到40CE)的前半部分对于每个部分都向后存储。也就是说,的第一部分Guid向后,然后是第二部分,然后是第三部分,但是保留了这些部分的顺序。之后,最后两节将按照它们在中显示的确切顺序进行存储Guid。 谁能解释一下?(下面包括一个更大的测试集。) 码: declare @guid_to_binary table ( [id] int identity(1,1), [guid] uniqueidentifier, [binary_conversion] binary(16) ); declare @i int = 1; …