我只是好奇,一直想知道为什么这样。
为了尝试找出是否能够在第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
你可能猜到了,这对我来说从未结束。整个周末我一直在服务器上运行它。
如果NewID总是给一个随机的ID,那为什么数字4总是出现呢?
BC13DF1C-60FB-41C2-B5B2-8F1A73CF2485
D790D359-AB3D-4657-A864-FA89FACB3E99
DF1BBC0C-4205-48E8-A1B6-EA9544D7C6E5
第15个位置是否是标识生成唯一标识符的系统的某种方式?
实际上,VB.net的System.Guid.Newguid
函数也是同样的情况。那么数字4只是微软专用的吗?
编辑:也许我还应该问一下,它们真的是唯一的吗?可以依靠它们在整个数据库中是唯一的吗?我知道基于这些假设的数据库系统保证它们在数据库内是唯一的。有数百万条记录在不同的表中... 它们中的任何一个都有可能相同吗?