Pregunta

Veo estos 2 acrónimos y me pregunto si hay alguna diferencia entre un GUID y un UUID.

¿Fue útil?

Solución

La respuesta simple es: no hay diferencia , son lo mismo. Trátelos como un valor de 16 bytes (128 bits) que se utiliza como un valor único. En Microsoft-speak se denominan GUID, pero llámelos UUID cuando no estén usando Microsoft-speak.

Incluso los autores de la especificación UUID y Microsoft afirman que son sinónimos:

  • De la introducción a IETF RFC 4122 " A IDentifier (UUID) URN del espacio de nombres Universalmente Único " ;: " un espacio de nombres de Recursos Uniformes para los UUID (Universal Identifier Único), también conocido como GUID (Identificador Único Globalmente). & Quot;

  • De la Recomendación UIT-T X.667, ISO / IEC 9834-8: 2004 Norma Internacional : " UUID también se conocen como Identificadores Únicos Globales (GUID), pero este término no se usa en esta Recomendación. & Quot;

  • Y Microsoft incluso reclamaciones el UUID RFC especifica un GUID: " En la programación de Microsoft Windows y en los sistemas operativos Windows, un identificador único global (GUID), como se especifica en [RFC4122], es ... El término identificador único universal (UUID) ) a veces se usa en las especificaciones de protocolo de Windows como sinónimo de GUID. "

Pero la respuesta correcta depende de lo que significa la pregunta cuando dice "UUID " ...

La primera parte depende de lo que piense el autor de la pregunta cuando está diciendo "UUID".

La afirmación de Microsoft implica que todos los UUID son GUID. Pero, ¿son todos los UIDUs de GUIDs? Es decir, ¿es el conjunto de todos los UUID solo un subconjunto adecuado del conjunto de todos los GUID o es exactamente el mismo conjunto?

En cuanto a los detalles del RFC 4122, hay cuatro variantes diferentes " " de los UUIDs. Esto se debe principalmente a que dichos identificadores de 16 bytes estaban en uso antes de que esas especificaciones se reunieran en la creación de una especificación UUID. De la sección 4.1.1 de RFC 4122 , las cuatro variantes de UUID son:

  1. Reservado, compatibilidad con versiones anteriores del sistema de computación en red
  2. La variante especificada en RFC 4122 (de las cuales hay cinco subvariantes, que se denominan " versiones ")
  3. Reservado, compatibilidad con versiones anteriores de Microsoft Corporation
  4. Reservado para definición futura.

Según RFC 4122, todas las UUID variantes son "UUID reales", entonces todos los GUID son UUID reales. A la pregunta literal "hay alguna diferencia entre GUID y UUID" La respuesta es definitivamente no para los UUID RFC 4122: no hay diferencia (pero sujeto a la segunda parte a continuación).

Pero no todos los GUID son variante 2 UUIDs (por ejemplo, Microsoft COM tiene GUID que son variantes 3 UUID). Si la pregunta era "¿hay alguna diferencia entre los UUID GUID y la variante 2", entonces la respuesta sería sí? Pueden ser diferentes. Es probable que alguien que haga la pregunta no sepa sobre variantes y que solo estén pensando en variante 2 UUID cuando dicen la palabra " UUID " (por ejemplo, conocen vagamente las formas de tiempo de la dirección MAC y de algoritmos de números aleatorios de UUID, que son ambas versiones de variante 2). En cuyo caso, la respuesta es sí diferente .

Entonces, la respuesta, en parte, depende de lo que la persona que pregunta está pensando cuando dice la palabra "UUID". ¿Significan UUID de la variante 2 (porque esa es la única variante que conocen) o todos los UUID?

La segunda parte depende de qué especificación se utiliza como la definición de UUID.

Si cree que fue confuso, lea UIT-T X. 667 ISO / IEC 9834-8: 2004 que se supone que está alineado y es técnicamente compatible con RFC 4122 . Tiene una oración adicional en la Cláusula 11.2 que dice, " Todos los UUID que cumplen con esta Recomendación | Norma Internacional tendrá bits de variante con el bit 7 del octeto 7 establecido en 1 y el bit 6 del octeto 7 establecido en 0 " Lo que significa que solo variante 2 UUID se ajustan a ese Estándar (esos dos valores de bit significan variante 2) Si eso es cierto, entonces no todos los GUID son UUID ITU-T / ISO / IEC conformes, porque los UUID ITU-T / ISO / IEC conformes solo pueden ser valores de variante 2

Por lo tanto, la respuesta real también depende de la especificación de UUID sobre la que se hace la pregunta. Suponiendo que estamos hablando claramente de todos los UUID y no solo de la variante 2 UUID: no hay ninguna diferencia entre GUID y los UUID de IETF, pero sí diferencia entre GUID y conformes UUIDs de ITU-T / ISO / IEC!

Las codificaciones binarias podrían diferir

Cuando se codifica en binario (a diferencia del formato de texto legible por humanos), el GUID se puede almacenar en una estructura con cuatro campos diferentes como sigue. Este formato difiere de UUID standard solo en el orden de bytes de los primeros 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

Otros consejos

GUID es la implementación de Microsoft del estándar UUID.

Por Wikipedia :

  

El término GUID generalmente se refiere a la implementación de Microsoft del Identificador universal único (UUID).

Una cita actualizada de ese mismo artículo de Wikipedia:

  

RFC 4122 indica que los UUID también se conocen como GUID " ;. Todo esto sugiere que " GUID " ;, al referirse originalmente a una variante de UUID utilizada por Microsoft, se ha convertido simplemente en un nombre alternativo para UUID & # 8230;

En realidad no. GUID está más centrado en Microsoft mientras que UUID se usa más ampliamente (por ejemplo, como en el esquema de URN urn: uuid: , y en CORBA).

El GUID tiene un uso prolongado en áreas donde no es necesariamente un valor de 128 bits de la misma manera que un UUID. Por ejemplo, la especificación de RSS define GUIDs para ser cualquier cadena de su elección , siempre que sea único, con un " isPermalink " atributo para especificar que el valor que está utilizando es solo un enlace permanente al elemento que se está sindicando.

La representación textual de GUID de Microsoft puede tener la forma de un UUID rodeado por dos llaves {} .

Una diferencia entre GUID en SQL Server y UUID en PostgreSQL es el caso de la letra; Las salidas de SQL Server son superiores, mientras que las salidas de PostgreSQL son inferiores.

Los valores hexadecimales " a " a través de " f " se muestran como caracteres en minúscula y no distinguen entre mayúsculas y minúsculas en la entrada. - rfc4122 # section-3

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top