Ответ 1
4 указывает, что он был сгенерирован с использованием псевдослучайного числа; См. Статья в Википедии для глобально уникальных идентификаторов в алгоритме.
Мне просто интересно, я всегда задавался вопросом, почему это так.
В попытке выяснить, могу ли я создать один без символа 4 на 15-м символе, я запустил это...
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 должен всегда давать случайный идентификатор, почему это так всегда.
BC13DF1C-60FB-41C2-B5B2-8F1A73CF2485
D790D359-AB3D-4657-A864-FA89FACB3E99
DF1BBC0C-4205-48E8-A1B6-EA9544D7C6E5
Является ли 15-я позиция некоторой идентификацией относительно системы, которая генерировала уникальный идентификатор?
Фактически, то же самое происходит с функцией VB.net System.Guid.Newguid
. Является ли 4 единственной вещью Microsoft?
Изменить: Возможно, я должен был спросить, действительно ли они уникальны? Можно ли полагаться на то, что они уникальны во всей базе данных? Я знаю системы баз данных, основанные на предположении, что они гарантированы быть уникальными в базе данных. С несколькими миллионами записей в разных таблицах... являются ли они потенциально одинаковыми?
4 указывает, что он был сгенерирован с использованием псевдослучайного числа; См. Статья в Википедии для глобально уникальных идентификаторов в алгоритме.
Это связано с версией UUID/GUID и тем, как она объединяется. Подробная информация о Википедии, резюме:
В каноническом представлении xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx наиболее значимые биты N указывают вариант (в зависимости от варианта, используются один, два или три бита). Вариант, охватываемый спецификацией UUID, обозначается двумя наиболее значимыми битами N, равными 1 0 (т.е. Шестнадцатеричный 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-создания все создают UUID версии 4. Взглянув на рассеяние COM-GUID, это выглядит так.
GUID не являются полностью случайными; они генерируются в соответствии с конкретным алгоритмом, который несколько отличается в зависимости от версии GUID.
В частности, когда первая цифра третьей группы равна 4, это означает, что это GUID v4.