Чи є різниця між GUID та UUID?


865

Я бачу, що ці два абревіатури кинуті навколо, і мені було цікаво, чи є якісь відмінності між GUID та UUID?


183
Я можу сказати "GUID", я не можу сказати "UUID".
Hardwareguy

48
Я проголошую UUID як "ти-wid"
Метт Грір

106
Я кажу "ти-ти-я-діе", але я не є носієм мови ...
Wilt

20
У специфікації UUID ( RFC-4122 ) зазначено абстрактно: Ця специфікація визначає Уніфікований простір імен імені ресурсу для UUID (Універсально унікальний ідентифікатор), також відомий як GUID (Глобально унікальний ідентифікатор)
Том

88
UUID є унікальними універсально (всесвіт), в той час як GUID є унікальними лише в усьому світі (глобальна область). Вони не є унікальними мультивалюально, тобто вони не є MUID. Це означає, що в принципі не слід використовувати GUID інтерпланетарно. Крім цього, вони в значній мірі взаємозамінні.
rsp

Відповіді:


815

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

Навіть автори специфікації UUID та Microsoft стверджують, що вони є синонімами:

  • З вступу до IETF RFC 4122 " Універсально унікальний ідентифікатор (UUID) URN Іменний простір ": "Уніфікований простір назв імен ресурсів для UUID (Універсально унікальний ідентифікатор), також відомий як GUID (глобально унікальний ідентифікатор)."

  • З Рекомендації МСЕ-Т X.667, міжнародного стандарту ISO / IEC 9834-8: 2004 : "UUID також відомі як глобально унікальні ідентифікатори (GUID), але цей термін не використовується в цій Рекомендації."

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

Але правильна відповідь залежить від того, що означає питання, коли на ньому написано "UUID" ...

Перша частина залежить від того, що думає запитувач, коли вони говорять "UUID".

Претензія Microsoft передбачає, що всі UUID - це GUID. Але чи всі GUIDs справжні 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 має GUIDs які варіант 3 UUID , ). Якщо питання було "чи є різниця між GUID та варіантом 2 UUID", то відповідь буде так - вони можуть бути різними. Хтось, хто задає питання, напевно, не знає про варіанти, і він може думати лише про варіант 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 відповідають стандартам ITU-T / ISO / IEC UUID, оскільки відповідні МСЕ-T / ISO / IEC UUID можуть мати значення лише 2 варіанту .

Тому реальна відповідь також залежить від того, про яку специфікацію UUID задається питання. Якщо припустити, що ми чітко говоримо про всі UUID, а не лише про UUID другого варіанту: немає різниці між GUID та IETF, але різниця між GUID та відповідними 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

35
Більш інформативна, ніж обрана відповідь. Я думаю, що обрана відповідь є абсолютною найпростішою відповіддю на питання.
Нова Олександрія

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

2
«Ендіанність» дуже важлива. Якщо ви збережете ідентифікатор як байти, ви отримаєте різні результати від GUID та UUID.
Калабацин

І уявіть, істоти застрягли лише за 665 грошей! Як я не міг цього схвалити?
Хаакон Лотвейт

655

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

За Вікіпедією :

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

Оновлена ​​цитата з тієї ж статті Вікіпедії:

RFC 4122 сам заявляє, що UUID "також відомі як GUID". Все це говорить про те, що "GUID", спочатку посилаючись на варіант UUID, використовуваний Microsoft, став просто альтернативною назвою UUID ...


39
(G означає глобально)
ted.strauss

487
Так само, як мікрософт взяти щось, що працює скрізь (у Всесвіті), і змусити його працювати в дуже маленькому підмножині (земній кулі) :)
Gus

33
Зауважте, що якщо ви хочете перетворити з бінарного представлення Microsoft GUID Microsoft у стандартний 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 використовується ширше (наприклад, як у урні: 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 # розділ-3

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.