Existe alguma diferença entre um GUID e um UUID?
Pergunta
Eu vejo estes 2 siglas jogados ao redor, e eu queria saber se existem diferenças entre um GUID e um UUID?
Solução
O resposta simples é: nenhuma diferença , eles são a mesma coisa. Tratá-los como um valor de 16 bytes (128 bits) que é usado como um valor único. Em Microsoft-falar que eles são chamados de GUIDs, mas chamá-los UUIDs quando não estiver usando Microsoft-falar.
Mesmo os autores da especificação UUID e Microsoft afirmam que eles são sinônimos:
-
A partir da introdução à IETF RFC 4122 " A Universalmente Unique Identifier (UUID) urna namespace ": " um Uniform namespace nome do recurso para UUIDs (Universally Unique Identifier), também conhecido como GUIDs (Globally Unique Identifier)"
-
A partir do X.667 Recomendação ITU-T, ISO / IEC 9834-8: 2004 Norma Internacional : "UUIDs também são conhecidos como Globally Unique Identifiers (GUIDs), mas este termo não é utilizado na presente recomendação."
-
E Microsoft mesmo reivindicações a GUID é especificado pelo UUID RFC: "programação em Microsoft Windows e em sistemas operacionais Windows, um identificador exclusivo global (GUID), conforme especificado no [RFC4122], é ... o termo universalmente identificador exclusivo (UUID) é por vezes utilizado no protocolo caderno de encargos do Windows como um sinônimo para GUID ".
Mas o resposta correta ??strong> depende do que o meio de perguntas, quando ele diz que "UUID" ...
A primeira parte depende do que o consulente está pensando quando eles estão dizendo "UUID".
alegação da Microsoft implica que todos os UUIDs são GUIDs. Mas são todos os GUIDs UUID reais? Ou seja, é o conjunto de todos os UUIDs apenas um subconjunto próprio do conjunto de todos os GUIDs, ou é exatamente o mesmo conjunto?
Olhando para os detalhes da RFC 4122, existem quatro diferentes "variantes" de UUIDs. Isto é principalmente porque tais identificadores 16 bytes foram em utilização antes de essas especificações foram reunidos na criação de uma especificação UUID. Da seção 4.1.1 do RFC 4122 , os quatro variantes de UUID são:
- reservados, Sistema Network Computing compatibilidade com versões anteriores
- O variante especificado no RFC 4122 (dos quais existem cinco sub-variantes, que são chamados de "versões")
- reservados, Microsoft Corporation compatibilidade com versões anteriores
- Reservado para definição futura.
De acordo com a RFC 4122, todos UUID variantes são "UUIDs reais", então todos os GUIDs são UUIDs reais. À pergunta literal "não há qualquer diferença entre GUID e UUID" a resposta é definitivamente não para RFC 4122 UUIDs:. nenhuma diferença (mas sujeita a segunda parte abaixo)
Mas nem todos os GUIDs são variante 2 UUIDs (por exemplo, Microsoft COM tem GUIDs que são variantes 3 UUIDs). Se a questão era "não há qualquer diferença entre GUID e variante 2 UUIDs", então a resposta seria sim - eles podem ser diferentes. Alguém que faz a pergunta provavelmente não sabe sobre variantes e eles só poderia estar pensando em variante 2 UUIDs quando dizem a palavra "UUID" (por exemplo, eles vagamente sei do MAC endereço + tempo e os algoritmos de números aleatórios formas de UUID, que são ambos versões de variante 2). Nesse caso, a resposta é sim diferente .
Portanto, a resposta, em parte, depende do que a pessoa que solicita está pensando quando dizem a palavra "UUID". Será que eles média variante 2 UUID (porque essa é a única variante eles estão cientes) ou todos os UUIDs?
A segunda parte depende de qual especificação a ser usado como a definição do UUID.
Se você acha que foi confuso, leia a ITU-T X. 667 ISO / IEC 9834-8: 2004 quaisé suposto ser alinhados e totalmente tecnicamente compatível com RFC 4122 . Tem uma frase extra na Cláusula 11.2, que diz: "Todos os UUIDs em conformidade com a presente recomendação | Norma devem ter bits variantes com bit 7 do octeto 7 set a 1 e o bit 6 do octeto 7 set a 0". Que significa que apenas variante 2 UUID estão de acordo com esse padrão (esses dois valores de bit significa variante 2). Se isso for verdade, então nem todos os GUIDs estão em conformidade ITU-T / ISO / IEC UUIDs, porque conformant ITU-T / ISO / IEC UUIDs só pode ser variante 2 valores.
Portanto, a resposta real também depende de qual especificação de UUID a questão é perguntando. Assumindo que estamos a falar claramente sobre todos os UUIDs e não apenas variante 2 UUIDs: existe nenhuma diferença entre GUID e UUID do IETF, mas sim diferença entre GUID e conformes ITU-T / UUIDs da ISO / IEC!
codificações binárias podem diferir
Quando codificado em binário (em oposição ao formato de texto legível), o GUID podem ser armazenados de uma estrutura com quatro campos diferentes como se segue. Este formato difere do UUID padrão apenas na ordem de bytes dos primeiros 3 campos.
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
Outras dicas
GUID é a implementação do padrão UUID da Microsoft.
Por Wikipedia :
O termo GUID normalmente se refere à implementação do rel="noreferrer"> Universalmente identificador exclusivo (UUID) padrão
Uma citação atualizado a partir desse mesmo Artigo da Wikipédia:
RFC 4122 em si afirma que UUIDs "também são conhecidos como GUIDs". Tudo isso sugere que "GUID", enquanto que originalmente referindo-se a uma variante do UUID usado pela Microsoft, tornou-se simplesmente um nome alternativo para UUID ...
Não é verdade. GUID é mais Microsoft-centric enquanto UUID é usado mais amplamente (por exemplo, como no urn: UUID: esquema de urna, e em CORBA).
GUID tem o uso de longa data em áreas onde não é necessariamente um valor de 128 bits da mesma forma como um UUID. Por exemplo, o RSS especificação define GUIDs para ser qualquer cadeia de sua escolha , contanto que ele é único, com um atributo "isPermalink" para especificar que o valor que você está usando é apenas uma volta permalink para o item que está sendo distribuído.
representação textual do GUID
da Microsoft pode ser na forma de um UUID ser cercado por duas chaves {}
.
Uma diferença entre GUID no SQL Server e UUID no PostgreSQL é maiúsculas e minúsculas; SQL Server gera superior, enquanto saídas PostgreSQL diminuir.
Os valores hexadecimais "a" a "f" são emitidos como caracteres em minúsculas e são insensíveis caso na entrada. - rfc4122 # section-3