我看到这两个缩写词到处乱放,我想知道 GUID 和 UUID 之间是否有任何区别?

有帮助吗?

解决方案

简单的答案 是: 没有不同, , 他们是一样的东西。将它们视为用作唯一值的 16 字节(128 位)值。在 Microsoft 语言中,它们称为 GUID,但在不使用 Microsoft 语言时,称为 UUID。

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

  • 从IETF简介开始 RFC 4122 "通用唯一标识符 (UUID) URN 命名空间”:“UUID(通用唯一标识符)的统一资源名称命名空间,也称为 GUID(全局唯一标识符)。”

  • 来自 ITU-T 建议 X.667、ISO/IEC 9834-8:2004 国际标准: :“UUID 也称为全局唯一标识符 (GUID),但本建议书中未使用该术语。”

  • 甚至微软 索赔 GUID 由 UUID RFC 指定:“在 Microsoft Windows 编程和 Windows 操作系统中,如 [RFC4122] 中指定的全局唯一标识符 (GUID) 是......术语通用唯一标识符 (UUID) 有时在 Windows 协议规范中用作 GUID 的同义词。”

但是 正确答案 取决于问题说“UUID”时的含义......

第一部分取决于询问者在说“UUID”时的想法。

Microsoft 的声明暗示所有 UUID 都是 GUID。但所有 GUID 都是真正的 UUID 吗?也就是说,所有 UUID 的集合只是所有 GUID 集合的真子集,还是完全相同的集合?

查看 RFC 4122 的详细信息,UUID 有四种不同的“变体”。这主要是因为在创建 UUID 规范时将这些规范合并在一起之前就已经使用了此类 16 字节标识符。来自第 4.1.1 节 RFC 4122, 四个 变体 UUID 为:

  1. 保留,网络计算系统向后兼容
  2. 变体 RFC 4122 中指定(其中有五个子变体,称为“版本”)
  3. 保留,微软公司向后兼容
  4. 保留供将来定义。

根据 RFC 4122,所有 UUID 变体 是“真实的 UUID”,那么所有 GUID 都是真实的 UUID。对于字面上的问题“GUID 和 UUID 之间有什么区别”,对于 RFC 4122 UUID 来说答案肯定是否定的: 没有不同 (但以下面第二部分为准)。

但并非所有 GUID 都是 变体 2 个 UUID(例如Microsoft COM 的 GUID 是变体 3 UUID)。如果问题是“GUID 和变体 2 UUID 之间有什么区别”,那么答案是肯定的——它们可以不同。问这个问题的人可能不知道 变体 他们可能只想 变体 2 UUID,当他们说“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 UUID 的,因为符合 ITU-T/ISO/IEC UUID 只能是 变体 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

其他提示

GUID是Microsoft对UUID标准的实现。

按照维基百科

  

术语GUID通常是指Microsoft对通用唯一标识符(UUID)标准的实现。

来自同一维基百科文章的更新引用:

  RFC 4122本身声明UUID“也称为GUID”。所有这些都表明,“GUID”虽然最初是指Microsoft使用的UUID变体,但它已成为UUID的另一个名称…

不是真的。 GUID更加以微软为中心,而UUID的使用范围更广(例如,在 urn:uuid: URN方案和CORBA中)。

GUID长期以来一直用于不一定是128位值的区域,与UUID的方式相同。例如, RSS规范定义GUID 为您选择的任何字符串,只要它是唯一的,带有“isPermalink”,属性指定您正在使用的值只是一个永久链接回到正在联合的项目。

Microsoft的 GUID 的文本表示形式可以是UUID形式,由两个大括号 {} 包围。

SQL Server中的GUID和PostgreSQL中的UUID之间的一个区别是字母大小写;当PostgreSQL输出较低时,SQL Server输出较高。

十六进制值“a”通过“f”输出为小写字符,并且在输入时不区分大小写。 - rfc4122#section-3

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top