Ela*_*rys 16 sql-server guid uniqueidentifier
我只是好奇,我一直想知道为什么会这样.
为了找出我是否可以在第15个角色创建一个没有角色4的人,我跑了这个......
DECLARE @GUID AS NVARCHAR(36)
DECLARE @COUNT AS INTEGER
SET @COUNT = 0
SET @GUID = CAST(NEWID() AS NVARCHAR(36))
WHILE SUBSTRING(@GUID,15,1) = '4'
BEGIN
SET @COUNT = @COUNT + 1
SET @GUID = CAST(NEWID() AS NVARCHAR(36))
END
PRINT 'Attempts : ' + CAST(@COUNT AS NVARCHAR(MAX))
PRINT @GUID
Run Code Online (Sandbox Code Playgroud)
正如你可能猜到的,这实际上从未真正结束.我整个周末都在服务器上运行.
如果NewID应该总是给出一个随机ID,为什么那个4总是在那里.
BC13DF1C-60FB-41C2-B5B2-8F1A73CF2485
D790D359-AB3D-4657-A864-FA89FACB3E99
DF1BBC0C-4205-48E8-A1B6-EA9544D7C6E5
Run Code Online (Sandbox Code Playgroud)
对于生成uniqueidentifier的系统,第15个位置是否有某种识别?
实际上,VB.net的System.Guid.Newguid
功能也是如此.4是微软唯一的东西吗?
编辑:也许我也应该问,他们真的是独一无二的吗?一个人可以依赖它们在整个数据库中是唯一的吗?我知道基于这些假设的数据库系统,这些系统在数据库中是唯一的.在不同的表中有数百万条记录......它们中的任何一条都可能相同吗?
它与UUID/GUID版本及其组合方式有关.关于维基百科的全部细节,摘要:
在规范表示中,xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx,N的最高有效位表示变体(取决于变体;使用一个,两个或三个位).由UUID规范覆盖的变体由N的两个最高有效位表示为10(即,十六进制N将始终为8,9,a或b).
在UUID规范涵盖的变体中,有五个版本.对于此变体,M的四位表示UUID版本(即十六进制M将为1,2,3,4或5).
...
版本4(随机)
版本4 UUID使用仅依赖于随机数的方案.该算法设置版本号以及两个保留位.使用随机或伪随机数据源设置所有其他位.
版本4 UUID具有xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx的形式,其中x是任何十六进制数字,y是8,9,A或B中的一个,例如f47ac10b-58cc-4372-a567-0e02b2c3d479.
本质上,该数字是UUID的版本,它解释了它是如何创建的.4
表示随机,因此暗示MSSQL使用随机生成(例如,基于MAC地址).
我相信,虽然不确定,大多数MS工具和可能的WinAPI GUID创建函数都创建版本4 UUID.看一下散布的COM GUID,看起来就是这种情况.
归档时间: |
|
查看次数: |
3007 次 |
最近记录: |