Есть ли разница между GUID и UUID? - PullRequest
794 голосов
/ 29 октября 2008

Я вижу эти 2 сокращения, и мне было интересно, есть ли различия между GUID и UUID?

Ответы [ 6 ]

727 голосов
/ 05 августа 2011

Простой ответ : без разницы , это одно и то же. Рассматривайте их как 16-байтовое (128 битное) значение, которое используется как уникальное значение. В Microsoft-говорят они называются GUID, но называют их UUID, когда не используется Microsoft-речь.

Даже авторы спецификации UUID и Microsoft утверждают, что они являются синонимами:

  • Из введения в IETF RFC 4122" A Пространство имен URN с универсальным уникальным идентификатором (UUID) ": "Пространство имен унифицированного имени ресурса для UUID (универсальный уникальный идентификатор) , также известный как GUID (глобальный уникальный идентификатор). "

  • Из Рекомендации МСЭ-Т X.667, международного стандарта ИСО / МЭК 9834-8: 2004 : «UUID также известны как глобально уникальные идентификаторы (GUID), но этот термин не используется в данной Рекомендации. "

  • И Microsoft даже заявляет GUID задается UUID RFC: «В программировании Microsoft Windows и в операционных системах Windows глобальный уникальный идентификатор (GUID), как указано в [RFC4122] , is ... Термин универсальный уникальный идентификатор (UUID) иногда используется в спецификациях протокола Windows как синоним GUID. "

Но правильный ответ зависит от того, что означает вопрос, когда он говорит "UUID" ...

Первая часть зависит от того, что думают спрашивающие, когда говорят «UUID».

Заявление Microsoft подразумевает, что все UUID являются GUID. Но все ли GUID являются настоящими UUID? То есть набор всех идентификаторов UUID является просто правильным подмножеством набора всех идентификаторов GUID или это точно такой же набор?

Рассматривая подробности RFC 4122, можно выделить четыре «варианта» UUID. Это происходит главным образом потому, что такие 16-байтовые идентификаторы использовались до того, как эти спецификации были объединены при создании спецификации UUID. Из раздела 4.1.1 RFC 4122 четыре варианта UUID:

  1. Зарезервировано, обратная совместимость сетевых вычислительных систем
  2. вариант , указанный в RFC 4122 (из которых есть пять подвариантов, которые называются "версиями")
  3. Зарезервировано, обратная совместимость с корпорацией Microsoft
  4. Зарезервировано для будущего определения.

Согласно RFC 4122, все варианты UUID являются "реальными UUID", тогда все GUID являются реальными UUID. На буквальный вопрос «есть ли разница между GUID и UUID», ответ определенно нет для RFC 4122 UUID: без разницы (но с учетом второй части ниже).

Но не все GUID являются вариантом 2 UUID (например, Microsoft COM имеет GUID, которые являются вариантом 3 UUID). Если бы вопрос был «есть ли разница между GUID и UUID варианта 2», то ответ был бы да - они могут быть разными. Кто-то задающий вопрос, вероятно, не знает о вариантах , и он может думать только о варианте 2 UUID, когда они произносят слово "UUID" (например, они смутно знают MAC-адрес + алгоритмы UUID времени и случайных чисел, которые являются версиями из вариантами 2). В этом случае ответ да отличается .

Таким образом, ответ, отчасти, зависит от того, что думает спрашивающий, когда говорит слово «UUID». Они имеют в виду вариант 2 UUID (потому что это единственный известный им вариант) или все UUID?

Вторая часть зависит от того, какая спецификация используется в качестве определения UUID.

Если вы считаете, что это сбивает с толку, прочитайте ITU-T X.667 ISO / IEC 9834-8: 2004 , который должен быть выровнен и полностью технически совместим с RFC 4122 . У него есть дополнительное предложение в п. 11.2, в котором говорится: «Все UUID, соответствующие настоящей Рекомендации | Международному стандарту, должны иметь вариантные биты с битом 7 октета 7, установленным в 1, и битом 6 октета 7, установленным в 0». Это означает, что только вариант 2 UUID соответствуют этому стандарту (эти два бита означают вариант 2). Если это так, то не все GUID соответствуют UUID МСЭ-T / ISO / IEC, поскольку совместимые UUID МСЭ-T / ISO / IEC могут быть только вариант 2 значения.

Следовательно, реальный ответ также зависит от того, какую спецификацию UUID задает вопрос. Предполагая, что мы четко говорим обо всех UUID, а не только о UUID варианта 2: между UUID GUID и IETF нет различий , а между GUID и *1097*, UUID МСЭ-T / ISO / IEC!

Двоичные кодировки могут отличаться

При кодировании в двоичном формате (в отличие от читаемого человеком текстового формата) GUID может быть сохранен в структуре с четырьмя различными полями, как указано ниже. Этот формат отличается от стандарта UUID только порядком байтов первых 3 полей.

Bits  Bytes Name   Endianness  Endianness
                   (GUID)      RFC 4122

32    4     Data1  Native      Big
16    2     Data2  Native      Big
16    2     Data3  Native      Big
64    8     Data4  Big         Big
636 голосов
/ 29 октября 2008

GUID - это реализация Microsoft стандарта UUID.

За Википедия :

Термин GUID обычно относится к реализации Microsoft стандарта Универсальный уникальный идентификатор (UUID).

Обновленная цитата из той же статьи в Википедии:

RFC 4122 сам утверждает, что UUID "также известны как GUID". Все это говорит о том, что «GUID», первоначально ссылаясь на вариант UUID, используемый Microsoft, стал просто альтернативным именем для UUID…

14 голосов
/ 29 октября 2008

Не совсем. GUID больше ориентирован на Microsoft, тогда как UUID используется более широко (например, как в urn: uuid: URN и в CORBA).

7 голосов
/ 05 июля 2012

GUID давно используется в областях, где он не обязательно является 128-битным значением так же, как UUID. Например, спецификация RSS определяет GUID как любую строку по вашему выбору, если она уникальна, с атрибутом «isPermalink», указывающим, что используемое вами значение - это просто постоянная ссылка на синдицируемый товар.

1 голос
/ 06 декабря 2017

Microsoft guid может быть в форме uuid, окруженного двумя фигурными скобками {} ...

0 голосов
/ 27 апреля 2019

Одно различие между GUID в SQL Server и UUID в PostgreSQL - это регистр букв; SQL Server выводит верхний, а PostgreSQL выводит нижний.

Шестнадцатеричные значения от "a" до "f" выводятся как строчные буквы и нечувствительны к регистру при вводе - rfc4122 # section-3

...