Czy jest jakaś różnica między GUID a UUID?

865

Widzę te 2 akronimy, które się rzucają i zastanawiałem się, czy są jakieś różnice między GUID a UUID?

Jon Tackabury
źródło
183
Mogę powiedzieć „GUID”, nie mogę powiedzieć „UUID”.
Hardwareguy,
48
UUID wymawiam jako „you-wid”
Matt Greer,
106
Mówię „you-you-I-dee”, ale nie jestem językiem ojczystym ...
Wilt
20
Specyfikacja UUID ( RFC-4122 ) mówi w streszczeniu: Ta specyfikacja definiuje przestrzeń nazw Uniform Resource Name dla UUID (uniwersalnie unikalny identyfikator), znany również jako GUID (globalnie unikalny identyfikator)
Tom
88
Identyfikatory UUID są unikalne uniwersalnie (zakres uniwersalny), natomiast identyfikatory GUID są unikalne globalnie (zakres globalny). Ani też nie są unikalne na poziomie międzynarodowym, tzn. Nie są to MUID. Oznacza to, że w zasadzie nie należy używać identyfikatorów GUID międzyplanetarnie. Poza tym są one prawie wymienne.
rsp

Odpowiedzi:

815

Prosta odpowiedź brzmi: nie ma różnicy , są one tak samo. Traktuj je jako wartość 16-bajtową (128 bitów), która jest używana jako wartość unikalna. W Microsoft-speak są nazywane identyfikatorami GUID, ale nazywają je UUID, gdy nie używają Microsoft-speak.

Nawet autorzy specyfikacji UUID i Microsoft twierdzą, że są synonimami:

  • Ze wstępu do IETF RFC 4122Uniwersalny unikatowy identyfikator (UUID) Przestrzeń nazw URN ”: „ Przestrzeń nazw jednolitej nazwy zasobu dla UUID (uniwersalnie unikalny identyfikator), znany również jako GUID (globalnie unikalny identyfikator)”.

  • Z zalecenia ITU-T X.667, ISO / IEC 9834-8: 2004 Międzynarodowy standard : „UUID są również znane jako globalnie unikalne identyfikatory (GUID), ale ten termin nie jest używany w tym zaleceniu”.

  • Microsoft twierdzi nawet, że identyfikator GUID jest określony przez UUID RFC: „W programowaniu Microsoft Windows i systemach operacyjnych Windows unikatowy na całym świecie identyfikator (GUID), jak określono w [RFC4122], jest… Termin uniwersalnie unikalny identyfikator (UUID ) jest czasem używany w specyfikacjach protokołu Windows jako synonim GUID. ”

Ale prawidłowa odpowiedź zależy od tego, co oznacza pytanie, gdy mówi „UUID” ...

Pierwsza część zależy od tego, co myśli pytający, gdy mówi „UUID”.

Twierdzenie Microsoft implikuje, że wszystkie UUID są identyfikatorami GUID. Ale czy wszystkie identyfikatory GUID są prawdziwymi identyfikatorami UUID? To znaczy, czy zestaw wszystkich UUID jest tylko odpowiednim podzbiorem zbioru wszystkich GUID, czy jest to dokładnie ten sam zestaw?

Patrząc na szczegóły RFC 4122, istnieją cztery różne „warianty” UUID. Wynika to głównie z tego, że takie 16-bajtowe identyfikatory były w użyciu, zanim te specyfikacje zostały zebrane w celu utworzenia specyfikacji UUID. Z sekcji 4.1.1 RFC 4122 cztery warianty UUID to:

  1. Zastrzeżone, Kompatybilność wsteczna z Network Computing System
  2. Wariant określony w dokumencie RFC 4122 (którego istnieje pięć sub-wariantów, które nazywane są „wersje”)
  3. Zastrzeżone, wsteczna kompatybilność Microsoft Corporation
  4. Zarezerwowane do przyszłej definicji.

Zgodnie z RFC 4122 wszystkie warianty UUID są „prawdziwymi UUID”, a następnie wszystkie GUID są prawdziwymi UUID. Na dosłowne pytanie „czy jest jakaś różnica między GUID a UUID” odpowiedź zdecydowanie nie brzmi dla UFC RFC 4122: brak różnicy (ale z zastrzeżeniem drugiej części poniżej).

Ale nie wszystkie identyfikatory GUID są identyfikatorami UUID wariantu 2 (np. Microsoft COM ma identyfikatory GUID będące identyfikatorami UUID wariantu 3). Jeśli pytanie brzmiało „czy jest jakaś różnica między GUID a UUID wariantu 2”, odpowiedź brzmiałaby tak - mogą być różne. Ktoś zadający pytanie prawdopodobnie nie wie o wariantach i mogą myśleć tylko o UUID wariantu 2, gdy wypowiadają słowo „UUID” (np. Niejasno znają adres MAC + czas i formy UUID algorytmów liczb losowych, które są zarówno wersje z wariantu 2). W takim przypadku odpowiedź jest tak inna .

Odpowiedź częściowo zależy od tego, co myśli osoba pytająca, gdy wypowiada słowo „UUID”. Czy mają na myśli wariant UUID wariantu 2 (ponieważ jest to jedyny znany im wariant) czy wszystkie UUID?

Druga część zależy od tego, która specyfikacja jest używana jako definicja UUID.

Jeśli uważasz, że było to mylące, przeczytaj ITU-T X.667 ISO / IEC 9834-8: 2004, który ma być wyrównany i w pełni zgodny technicznie z RFC 4122 . Ma dodatkowe zdanie w klauzuli 11.2, które mówi: „Wszystkie UUID zgodne z niniejszym zaleceniem | Międzynarodowy standard powinien mieć bity wariantu z bitem 7 oktetu 7 ustawionym na 1 i bitem 6 oktetu 7 ustawionym na 0”. Co oznacza, że ​​tylko UUID wariantu 2 jest zgodny z tym standardem (te dwie wartości bitowe oznaczają wariant 2). Jeśli to prawda, nie wszystkie identyfikatory GUID są zgodne z identyfikatorami UUID ITU-T / ISO / IEC, ponieważ zgodne UUID ITU-T / ISO / IEC mogą być tylko wartościami wariantu 2.

Dlatego prawdziwa odpowiedź zależy również od specyfikacji UUID, o którą pyta pytanie. Zakładając, że wyraźnie mówimy o wszystkich UUID, a nie tylko UUID wariantu 2: nie ma różnicy między GUID a UUID IETF, ale tak, różnica między GUID a UUID zgodnymi z ITU-T / ISO / IEC!

Kodowanie binarne może się różnić

Po zakodowaniu w formacie binarnym (w przeciwieństwie do formatu tekstowego czytelnego dla człowieka) GUID może być przechowywany w strukturze z czterema różnymi polami w następujący sposób. Ten format różni się od standardu UUID tylko kolejnością bajtów pierwszych 3 pól.

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
Hoylen
źródło
35
Więcej informacji niż wybrana odpowiedź. Myślę jednak, że wybrana odpowiedź jest absolutnie najprostszą odpowiedzią na pytanie.
Nowa Aleksandria,
3
Tabela kodowania binarnego osadzona w odpowiedzi jest bardzo przydatna. Tnx
Luciano
2
„Endianizm” jest bardzo ważny. Jeśli przechowujesz identyfikator jako bajty, otrzymasz różne wyniki z GUID i UUID.
Calabacin,
I wyobraź sobie, że istoty utknęły w zaledwie 665 głosach pozytywnych! Jak mogłem nie głosować za tym?
Haakon Løtveit,
655

GUID to implementacja standardu UUID przez Microsoft.

Według Wikipedii :

Termin GUID zwykle odnosi się do implementacji przez Microsoft standardu UUID ( Universally Unique Identifier ).

Zaktualizowany cytat z tego samego artykułu w Wikipedii:

Sam RFC 4122 stwierdza, że ​​identyfikatory UUID „są również znane jako identyfikatory GUID”. Wszystko to sugeruje, że „GUID”, choć pierwotnie odnosi się do wariantu UUID używanego przez Microsoft, stał się po prostu alternatywną nazwą dla UUID…

bdukes
źródło
39
(G oznacza Globalnie)
ted.strauss
487
Podobnie jak Microsoft, weź coś, co działa wszędzie (wszechświat) i spraw, aby działało w bardzo małym podzbiorze (glob) :)
Gus
33
Zauważ, że jeśli chcesz przekonwertować binarną reprezentację GUID Microsoftu na standardowy UUID, będziesz musiał przełączyć endianness pierwszych trzech (z czterech) pól danych, jak wyszczególniono w sekcji „Kodowanie binarne” tutaj: en.wikipedia.org/ wiki / Globally_unique_identifier
Formularz
87
Właśnie dlatego astronautom nie wolno instalować systemu Windows na ISS.
intuicyjnie
10
@bdukes Wydaje się, że Wikipedia zmieniła coś, co nazywacie ich oświadczeniem. Teraz brzmiThe term "GUID" typically refers to various implementations of the universally unique identifier (UUID) standard.
Khadim Ali,
13

Nie całkiem. GUID jest bardziej zorientowany na Microsoft, podczas gdy UUID jest używany szerzej (np. Jak w schemacie urn: uuid: URN oraz w CORBA).

Mark Cidade
źródło
1
Jaka jest definicja i efekt Microsoft-centricity?
Karl Richter
8

GUID ma wieloletnie zastosowanie w obszarach, w których niekoniecznie jest to wartość 128-bitowa w taki sam sposób jak UUID. Na przykład specyfikacja RSS definiuje identyfikatory GUID jako dowolny wybrany ciąg, o ile jest unikalny, z atrybutem „isPermalink”, który określa, że ​​używana wartość jest tylko bezpośrednim linkiem do syndykowanego elementu.

Tony Arcieri
źródło
0

GUIDTekstowa reprezentacja Microsoftu może mieć postać UUID otoczonego dwoma nawiasami klamrowymi {}.

Chris Stryczyński
źródło
6
Jest to tylko reprezentacja tekstowa identyfikatora GUID. Rzeczywista struktura jest inna.
anonimowy
-2

Jedną z różnic między GUID w SQL Server i UUID w PostgreSQL jest wielkość liter; Wyjścia programu SQL Server są wyższe, a wyniki PostgreSQL niższe.

Wartości szesnastkowe od „a” do „f” są wyprowadzane jako małe litery i przy wprowadzaniu nie są rozróżniane małe i wielkie litery. - rfc4122 # sekcja-3

eezing
źródło