Veo estos 2 acrónimos, y me preguntaba si hay alguna diferencia entre un GUID y un UUID.
Veo estos 2 acrónimos, y me preguntaba si hay alguna diferencia entre un GUID y un UUID.
Respuestas:
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 llaman GUID, pero los llama UUID cuando no se usa 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 " Un espacio de nombres URN de IDENTIFICADOR Universalmente Único (UUID) ": "un espacio de nombre de Nombre de Recurso Uniforme para UUID (IDentificador Universalmente Único), también conocido como GUID (IDentificador Único Global)".
De la Recomendación UIT-T X.667, Norma Internacional ISO / IEC 9834-8: 2004 : "Los UUID también se conocen como identificadores únicos globales (GUID), pero este término no se utiliza en esta Recomendación".
Y Microsoft incluso afirma que el RFID UUID 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 universalmente único (UUID) ) a veces se usa en las especificaciones del protocolo de Windows como sinónimo de GUID ".
Pero la respuesta correcta depende del significado de la pregunta cuando dice "UUID" ...
La primera parte depende de lo que piense el autor cuando dice "UUID".
La afirmación de Microsoft implica que todos los UUID son GUID. Pero, ¿todos los GUID son UUID reales? Es decir, ¿el conjunto de todos los UUID es solo un subconjunto adecuado del conjunto de todos los GUID, o es exactamente el mismo conjunto?
Mirando los detalles del RFC 4122, hay cuatro "variantes" diferentes de UUID. Esto se debe principalmente a que dichos identificadores de 16 bytes estaban en uso antes de que esas especificaciones se unieran 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:
De acuerdo con RFC 4122, todas las variantes de UUID son " UUID reales", luego todos los GUID son UUID reales. Para 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 UUID variantes 2 (por ejemplo, Microsoft COM tiene GUID que son UUID variantes 3). Si la pregunta era "¿hay alguna diferencia entre el GUID y los UUID de la variante 2", entonces la respuesta sería sí, pueden ser diferentes. Alguien que hace la pregunta probablemente no conoce las variantes y puede que solo piense en los UUID de la variante 2 cuando dice la palabra "UUID" (por ejemplo, sabe vagamente la dirección MAC + tiempo y las formas de algoritmos de números aleatorios de UUID, que son ambas versiones de la variante 2). En cuyo caso, la respuesta es sí diferente .
Entonces, la respuesta, en parte, depende de lo que piense la persona que pregunta cuando dice la palabra "UUID". ¿Significan UUID variante 2 (porque esa es la única variante que conocen) o todos los UUID?
La segunda parte depende de qué especificación se utilice como definición de UUID.
Si cree que eso fue confuso, lea la norma ITU-T X.667 ISO / IEC 9834-8: 2004, que se supone que está alineada y es técnicamente compatible con RFC 4122 . Tiene una oración adicional en la Cláusula 11.2 que dice: "Todos los UUID conformes a esta Recomendación | Norma Internacional tendrán bits variantes 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 el UUID de la variante 2 se ajusta a ese estándar (esos dos valores de bits significan la variante 2). Si eso es cierto, entonces no todos los GUID cumplen con los UUID ITU-T / ISO / IEC, porque los UUID conformes ITU-T / ISO / IEC solo pueden ser valores de la variante 2.
Por lo tanto, la respuesta real también depende de qué especificación de UUID se haga la pregunta. Asumiendo que estamos hablando claramente de todos los UUID y no solo de los UUID de la variante 2: ¡no hay diferencia entre el GUID y los UUID de IETF, pero sí la diferencia entre el GUID y los UUID conformes de ITU-T / ISO / IEC!
Las codificaciones binarias pueden diferir
Cuando se codifica en binario (a diferencia del formato de texto legible por humanos), el GUID puede almacenarse en una estructura con cuatro campos diferentes como se muestra a continuación. Este formato difiere del estándar UUID 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
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 estándar de Identificador Único Universal (UUID).
Una cita actualizada de ese mismo artículo de Wikipedia:
El RFC 4122 en sí mismo establece que los UUID "también se conocen como GUID". Todo esto sugiere que "GUID", aunque originalmente se refería a una variante de UUID utilizada por Microsoft, se ha convertido simplemente en un nombre alternativo para UUID ...
The term "GUID" typically refers to various implementations of the universally unique identifier (UUID) standard.
Realmente no. El GUID está más centrado en Microsoft, mientras que el UUID se usa más ampliamente (por ejemplo, como en el esquema urn: uuid: URN y en CORBA).
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 RSS define los GUID como cualquier cadena de su elección, siempre que sea única, con un atributo "isPermalink" para especificar que el valor que está utilizando es solo un enlace permanente al elemento que se está sindicando.
La GUID
representación textual de Microsoft puede tener la forma de un UUID rodeado de dos llaves {}
.
Una diferencia entre GUID en SQL Server y UUID en PostgreSQL es la letra mayúscula; Las salidas de SQL Server son superiores mientras que las de PostgreSQL son inferiores.
Los valores hexadecimales "a" a "f" se muestran como caracteres en minúscula y no distinguen entre mayúsculas y minúsculas en la entrada. - rfc4122 # sección-3