Есть ли разница между GUID и UUID?


866

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


183
Я могу сказать «GUID», я не могу сказать «UUID».
Hardwareguy

48
Я произношу UUID как "вы-вид"
Мэтт Грир

106
Я говорю "ты-ты-я-ди", но я не являюсь носителем языка ...
Уил

20
В спецификации UUID ( RFC-4122 ) сказано абстрактно: эта спецификация определяет пространство имен унифицированного имени ресурса для UUID (универсальный уникальный идентификатор), также известный как GUID (глобальный уникальный идентификатор)
Том

89
Идентификаторы UUID универсальны (универсальная область), а идентификаторы GUID уникальны только глобально (глобальная область). Ни один из них не является универсальным, то есть не является MUID. Это означает, что в принципе вы не должны использовать GUID межпланетно. Кроме этого, они в значительной степени взаимозаменяемы.
RSP

Ответы:


817

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

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

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

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

  • И Microsoft даже утверждает, что GUID указан в UUID RFC: «В программировании Microsoft Windows и в операционных системах Windows глобальный уникальный идентификатор (GUID), как указано в [RFC4122], является ... Термин универсальный уникальный идентификатор (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 Corporation обратная совместимость
  4. Зарезервировано для будущего определения.

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

Но не все GUID являются UUID варианта 2 (например, Microsoft COM имеет GUID, которые являются UUID варианта 3). Если бы вопрос был «есть ли разница между GUID и UUID варианта 2», то ответ был бы да - они могут быть разными. Кто-то, задающий вопрос, вероятно, не знает о вариантах, и он может думать только о UUID варианта 2, когда произносит слово «UUID» (например, они смутно знают формы UUID с MAC-адресом + время и алгоритмы случайных чисел, которые оба варианта из варианта 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». Это означает, что только UUID варианта 2 соответствует этому стандарту (эти два битовых значения означают вариант 2). Если это так, то не все GUID соответствуют UUID МСЭ-T / ISO / IEC, поскольку совместимые UUID МСЭ-T / ISO / IEC могут иметь только значения варианта 2.

Следовательно, реальный ответ также зависит от того, какую спецификацию UUID задает вопрос. Предполагая, что мы четко говорим обо всех UUID, а не только о UUID варианта 2: нет разницы между UUID GUID и IETF, но есть разница между GUID и соответствующими UUID ITU-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

35
Более информативный, чем выбранный ответ. Я думаю, что выбранный ответ является абсолютным самым простым ответом на вопрос.
Новая Александрия

3
Таблица двоичного кодирования, встроенная в ответ, очень полезна. Tnx
Лучано

2
Порядковый номер очень важен. Если вы храните идентификатор в байтах, вы получите разные результаты от GUID и UUID.
Калабацин

И представьте, существа застряли на 665 возражениях! Как я мог не одобрить это?
Haakon Løtveit

656

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

В Википедии :

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

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

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


40
(G означает глобально)
ted.strauss

487
Так же, как Microsoft, взять что-то, что работает везде (вселенная), и заставить его работать в очень маленьком подмножестве (глобус) :)
Gus

33
Обратите внимание, что если вы хотите преобразовать двоичное представление Microsoft GUID в стандартный UUID, вам нужно будет перевернуть порядковые номера первых трех (из четырех) полей данных, как подробно описано в разделе «Двоичное кодирование» здесь: en.wikipedia.org/ wiki / Globally_unique_identifier
Форма

87
Именно поэтому космонавтам не разрешается устанавливать Windows на МКС.
интуитивно

10
@bdukes Кажется, Википедия изменила то, что вы называли их утверждением. Это теперь читаетThe term "GUID" typically refers to various implementations of the universally unique identifier (UUID) standard.
Хадим Али

13

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


1
Каково определение и эффект Microsoft-центричности?
Карл Рихтер

8

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


0

GUIDТекстовое представление Microsoft может быть в форме UUID, окруженного двумя фигурными скобками {}.


6
Это только для текстового представления GUID. Фактическая структура отличается.
анонимно

-2

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.