C'è qualche differenza tra un GUID e un UUID?


866

Vedo questi 2 acronimi gettati in giro e mi chiedevo se ci sono differenze tra un GUID e un UUID?


183
Posso dire "GUID", non posso dire "UUID".
Hardwareguy,

48
Io pronuncio UUID come "tu-wid"
Matt Greer il

106
Dico "tu-tu-io-dee", ma non sono un madrelingua ...
Wilt

20
La specifica UUID ( RFC-4122 ) dice in astratto: Questa specifica definisce uno spazio dei nomi Uniform Resource Name per UUID (Universally Unique IDentifier), noto anche come GUID (Globally Unique IDentifier)
Tom,

89
Gli UUID sono univoci universalmente (ambito universo) mentre i GUID sono univoci solo globalmente (ambito globo). Né sono unici a livello universale, cioè non sono MUID. Significa che in linea di principio non dovresti usare i GUID interplanetariamente. Oltre a ciò, sono praticamente intercambiabili.
rsp,

Risposte:


817

La semplice risposta è: nessuna differenza , sono la stessa cosa. Considerali come un valore di 16 byte (128 bit) utilizzato come valore univoco. In Microsoft-speak vengono chiamati GUID, ma li chiamano UUID quando non si utilizza Microsoft-speak.

Persino gli autori delle specifiche UUID e Microsoft affermano di essere sinonimi:

  • Dall'introduzione a IETF RFC 4122 " Uno spazio dei nomi URN IDentificatore universale (UUID) ": "uno spazio dei nomi nome risorsa uniforme per UUID (IDentificatore universalmente unico), noto anche come GUID (IDentificatore univoco globale)."

  • Dalla raccomandazione ITU-T X.667, ISO / IEC 9834-8: 2004 Standard internazionale : "Gli UUID sono anche conosciuti come identificatori univoci globali (GUID), ma questo termine non è usato in questa raccomandazione."

  • E Microsoft afferma addirittura che un UUID RFC specifica un GUID: "Nella programmazione di Microsoft Windows e nei sistemi operativi Windows, un identificatore univoco globale (GUID), come specificato in [RFC4122], è ... Il termine identificatore univoco universale (UUID ) viene talvolta utilizzato nelle specifiche del protocollo di Windows come sinonimo di GUID. "

Ma la risposta corretta dipende dal significato della domanda quando dice "UUID" ...

La prima parte dipende da cosa pensa chi chiede quando sta dicendo "UUID".

L'affermazione di Microsoft implica che tutti gli UUID sono GUID. Ma tutti i GUID sono UUID reali? Cioè, l'insieme di tutti gli UUID è solo un sottoinsieme corretto dell'insieme di tutti i GUID o è esattamente lo stesso insieme?

Guardando i dettagli di RFC 4122, ci sono quattro diverse "varianti" di UUID. Ciò è dovuto principalmente al fatto che tali identificatori a 16 byte erano in uso prima che tali specifiche fossero riunite nella creazione di una specifica UUID. Dalla sezione 4.1.1 di RFC 4122 , le quattro varianti di UUID sono:

  1. Compatibilità con le versioni precedenti del sistema di Network Computing
  2. La variante specificata in RFC 4122 (di cui ci sono cinque sotto-varianti, che sono chiamate "versioni")
  3. Riservato, compatibilità con le versioni precedenti di Microsoft Corporation
  4. Riservato per la definizione futura.

Secondo RFC 4122, tutte le varianti di UUID sono "UUID reali", quindi tutti i GUID sono UUID reali. Alla domanda letterale "c'è qualche differenza tra GUID e UUID" la risposta è decisamente no per gli UUID RFC 4122: nessuna differenza (ma soggetta alla seconda parte in basso).

Ma non tutti i GUID sono UUID variante 2 (ad es. Microsoft COM ha GUID che sono UUID variante 3). Se la domanda fosse "c'è qualche differenza tra GUID e UUID variante 2", allora la risposta sarebbe sì - possono essere diversi. Qualcuno che pone la domanda probabilmente non conosce le varianti e potrebbe pensare solo agli UUID di variante 2 quando dicono la parola "UUID" (ad esempio conoscono vagamente l'indirizzo MAC + tempo e le forme di algoritmi di numeri casuali di UUID, che sono entrambe le versioni della variante 2). In tal caso, la risposta è sì diversa .

Quindi la risposta, in parte, dipende da cosa pensa la persona che chiede quando dice la parola "UUID". Significano l'UUID variante 2 (perché questa è l'unica variante di cui sono a conoscenza) o tutti gli UUID?

La seconda parte dipende dalla specifica utilizzata come definizione di UUID.

Se ritieni che sia stato confuso, leggi ITU-T X.667 ISO / IEC 9834-8: 2004 che dovrebbe essere allineato e completamente tecnicamente compatibile con RFC 4122 . Ha una frase aggiuntiva nella clausola 11.2 che dice "Tutti gli UUID conformi a questa Raccomandazione | Lo standard internazionale deve avere bit di variante con bit 7 dell'ottetto 7 impostato su 1 e bit 6 dell'ottetto 7 impostato su 0". Ciò significa che solo l' UUID variante 2 è conforme a quello standard (quei due valori di bit indicano la variante 2). Se ciò è vero, non tutti i GUID sono conformi agli UUID ITU-T / ISO / IEC, poiché gli UUID ITU-T / ISO / IEC conformi possono essere solo varianti valori della 2.

Pertanto, la vera risposta dipende anche da quale specifica di UUID si pone la domanda. Supponendo che stiamo chiaramente parlando di tutti gli UUID e non solo della UUID di variante 2: non c'è differenza tra GUID e UUID di IETF, ma sì differenza tra GUID e conforme ITU-T UUID / ISO / IEC di!

Le codifiche binarie potrebbero differire

Quando codificato in binario (al contrario del formato di testo leggibile dall'uomo), il GUID può essere memorizzato in una struttura con quattro campi diversi come segue. Questo formato differisce dallo standard UUID solo nell'ordine dei byte dei primi 3 campi.

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
Più istruttiva della risposta scelta. Penso che la risposta scelta sia la risposta in assoluto più semplice alla domanda, però.
Nuova Alessandria,

3
La tabella di codifica binaria incorporata nella risposta è molto utile. Tnx
Luciano

2
L '"endianness" è molto importante. Se si memorizza l'id come byte, si otterranno risultati diversi da GUID e UUID.
Calabacin,

E immagina, esseri bloccati a soli 665 voti positivi! Come potrei non votare questo?
Haakon Løtveit,

656

GUID è l'implementazione Microsoft dello standard UUID.

Per Wikipedia :

Il termine GUID di solito si riferisce all'implementazione di Microsoft dello standard UUID ( Universally Unique Identifier ).

Una citazione aggiornata dallo stesso articolo di Wikipedia:

RFC 4122 stesso afferma che gli UUID "sono anche noti come GUID". Tutto ciò suggerisce che "GUID", mentre originariamente si riferiva a una variante di UUID utilizzata da Microsoft, è diventato semplicemente un nome alternativo per UUID ...


40
(La G sta per Globalmente)
ted.strauss

487
Proprio come Microsoft per prendere qualcosa che funziona ovunque (l'universo) e farlo funzionare in un sottoinsieme molto piccolo (il globo) :)
Gus,

33
Si noti che se si desidera convertire dalla rappresentazione binaria GUID di Microsoft in un UUID standard, è necessario capovolgere l'endianità dei primi tre (di quattro) campi di dati come dettagliato nella sezione "Codifica binaria" qui: en.wikipedia.org/ wiki / Globally_unique_identifier
Modulo

87
Questo è il motivo per cui agli astronauti non è consentito installare Windows sulla ISS.
intuito il

10
@bdukes sembra che Wikipedia abbia cambiato quella che hai definito la loro dichiarazione. Ora leggeThe term "GUID" typically refers to various implementations of the universally unique identifier (UUID) standard.
Khadim Ali,

13

Non proprio. Il GUID è più incentrato su Microsoft, mentre l'UUID è usato più ampiamente (ad esempio, come nell'urna: uuid: schema URN e in CORBA).


1
Qual è la definizione e l'effetto di Microsoft-centricity?
Karl Richter,

8

Il GUID ha un utilizzo di lunga data in aree in cui non è necessariamente un valore a 128 bit allo stesso modo di un UUID. Ad esempio, la specifica RSS definisce i GUID come qualsiasi stringa di tua scelta, purché unica, con un attributo "isPermalink" per specificare che il valore che stai utilizzando è solo un permalink all'elemento che viene sindacato.


0

La GUIDrappresentazione testuale di Microsoft può essere sotto forma di un UUID circondato da due parentesi graffe {}.


6
Questo è solo per una rappresentazione testuale del GUID. L'attuale struttura è diversa.
anonimo

-2

Una differenza tra GUID in SQL Server e UUID in PostgreSQL è il maiuscolo / minuscolo; SQL Server genera un output superiore mentre PostgreSQL genera un output inferiore.

I valori esadecimali da "a" a "f" vengono emessi come caratteri minuscoli e non fanno distinzione tra maiuscole e minuscole sull'input. - rfc4122 # section-3

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.