天天看点

java guid 与uuid 区别,guid和uuid有什么区别吗?

我看到了这两个首字母缩略词,我想知道guid和uuid之间是否有什么区别?

我可以说"guid",我不能说"uuid"。

我把Uuid发音为"Youwid"

我说"你-你-我-迪",但我不是本地人…

UUID规范(RFC-4122)在摘要中说:此规范为UUID(通用唯一标识符)定义了统一的资源名称命名空间,也称为guid(全局唯一标识符)。

UUID是唯一的通用(宇宙范围),而guid是唯一的全局(全球范围)。它们都不是唯一的多元宇宙,也就是说,它们不是muid。这意味着原则上你不应该在行星间使用吉他。除此之外,它们几乎可以互换。

@rsp-我很高兴,但后来回忆说量子计算正在迅速成为一件事,所以你可能有一个观点!

简单的答案是:没有区别,它们是一样的。将它们视为一个16字节(128位)的值,该值用作唯一值。在Microsoft Speak中,它们被称为guid,但在不使用Microsoft Speak时,它们被称为uuid。好的。

甚至UUID规范和Microsoft的作者都声称它们是同义词:好的。

从IETF RFC 4122"通用唯一标识符(UUID)URN命名空间"的介绍中可以看出:"UUID(通用唯一标识符)的统一资源名称命名空间,也称为guid(全局唯一标识符)。"好的。

根据ITU-T建议X.667,ISO/IEC 9834-8:2004国际标准:"UUID也称为全球唯一标识符(guid),但本建议中不使用此术语。"好的。

微软甚至声称UUID RFC指定了一个guid:"在微软Windows编程和Windows操作系统中,如[rfc4122]中指定的全局唯一标识符(guid)是……在Windows协议规范中,术语"通用唯一标识符(UUID)"有时用作guid的同义词。"好的。

但是正确的答案取决于当问题说"uuid"是什么意思…好的。

第一部分取决于提问者在说"uuid"时的想法。好的。

微软的声明暗示所有UUID都是guid。但是所有的guid都是真正的uuid吗?也就是说,所有uuid的集合只是所有guid集合的一个子集,还是完全相同的集合?好的。

查看RFC4122的细节,UUID有四个不同的"变体"。这主要是因为这样的16字节标识符在创建UUID规范之前就已经被使用了。根据RFC 4122第4.1.1节,UUID的四个变体是:好的。

保留,网络计算系统向后兼容

RFC 4122中指定的变体(其中有五个子变体,称为"版本")。

保留,Microsoft Corporation向后兼容性

为将来的定义保留。

根据RFC4122,所有的uuid变体都是"真正的uuid",那么所有的guid都是真正的uuid。对于字面上的问题"guid和uuid之间是否有任何区别",对于rfc 4122 uuid,答案肯定是否定的:没有区别(但以下面的第二部分为准)。好的。

但并非所有的guid都是变体2 uuid(例如,Microsoft com有变体3 uuid的guid)。如果问题是"guid和变量2 uuid之间有什么区别",那么答案是肯定的——它们可以是不同的。问这个问题的人可能不知道变种,他们可能只是在说"uuid"这个词时才想到变种2 uuid(例如,他们模糊地知道mac地址+时间和uuid的随机数算法形式,这两种形式都是变种2的版本)。在这种情况下,答案是肯定的不同。好的。

因此,答案在某种程度上取决于被问者在说"UUID"这个词时的想法。它们是指变体2 UUID(因为这是它们唯一知道的变体)还是所有UUID?好的。

第二部分取决于将哪个规范用作UUID的定义。好的。

如果您认为这令人困惑,请阅读ITU-T X.667 ISO/IEC 9834-8:2004,该标准应与RFC 4122保持一致并在技术上完全兼容。在第11.2条中有一句额外的话:"符合本建议的所有UUID国际标准应具有八位字节7的位7设置为1,八位字节7的位6设置为0的变量位。"这意味着只有变量2 UUID符合该标准(这两个位值意味着变量2)。如果这是真的,那么不是所有的guid都符合itu-t/iso/iec uuids,因为符合itu-t/iso/iec uuids只能是变量2的值。好的。

因此,真正的答案还取决于问题所询问的uuid的规范。假设我们清楚地讨论了所有UUID,而不仅仅是变体2 UUID:guid和ietf的UUID之间没有区别,但是guid和符合的itu-t/iso/iec的UUID之间是有区别的!好的。

二进制编码可能不同好的。

当以二进制(而不是人类可读的文本格式)编码时,guid可以存储在具有以下四个不同字段的结构中。此格式与UUID标准的区别仅在于前3个字段的字节顺序。好的。

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

好啊。

比选择的答案更有用。不过,我认为选择的答案绝对是这个问题最简单的答案。

答案中嵌入的二进制编码表非常有用。TNX

"endianness"非常重要。如果将ID存储为字节,您将从guid和uuid得到不同的结果。

想象一下,众生只获得了665张赞成票!我怎么能不投赞成票呢?

guid是微软对uuid标准的实现。

维基百科:

The term GUID usually refers to Microsoft's implementation of the Universally Unique Identifier (UUID) standard.

来自维基百科文章的最新引用:

RFC 4122 itself states that UUIDs"are also known as GUIDs". All this suggests that"GUID", while originally referring to a variant of UUID used by Microsoft, has become simply an alternative name for UUID…

(G代表全球)

就像微软一样,把在任何地方都能工作的东西(宇宙)放在一个非常小的子集(地球)中:

请注意,如果要将Microsoft的guid二进制表示转换为标准的uuid,则必须翻转前三(共四)个数据字段的端序,如"二进制编码"部分所述:en.wikipedia.org/wiki/globall_unique_identifier

这就是为什么宇航员不能在国际空间站上安装窗户的原因。

@看来维基百科改变了你所说的他们的说法。它现在显示The term"GUID" typically refers to various implementations of the universally unique identifier (UUID) standard.。

就像微软把其他人提出的,已经运行良好的东西,用一个新名字开发出一个与之竞争的劣质标准,然后让我们浪费一些时间去弄清楚为什么……

但事实并非如此,直到微软开始使用guid之后才创建了这个标准。

不是真的。guid更以Microsoft为中心,而uuid的使用更广泛(例如,在urn:uuid:urn方案和corba中)。

guid在不一定是128位值的地区有着长期的使用,其使用方式与uuid相同。例如,RSS规范将guid定义为您选择的任何字符串,只要它是唯一的,并具有"is permalink"属性,以指定您使用的值只是指向要联合的项目的permalink。

微软的guid可以是一个uuid,由两个大括号{}包围…

这仅用于guid的文本表示。实际结构不同。