我看到这两个首字母缩略词乱七八糟,我想知道GUID和UUID之间是否有任何区别?
我看到这两个首字母缩略词乱七八糟,我想知道GUID和UUID之间是否有任何区别?
Answers:
在简单的答案是:没有区别,它们是同一个东西。将它们视为一个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个字节的标识符。从RFC 4122的 4.1.1节开始,UUID 的四个变体是:
根据RFC 4122,所有UUID 变体都是“真实UUID”,那么所有GUID都是真实UUID。对于字面问题“ GUID和UUID之间是否有任何区别”,对于RFC 4122 UUID绝对没有答案:没有区别(但以下面的第二部分为准)。
但是,并非所有的GUID都是变体 2 UUID(例如,Microsoft COM的GUID就是变体3 UUID)。如果问题是“ 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 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的简单替代名称……
The term "GUID" typically refers to various implementations of the universally unique identifier (UUID) standard.
GUID在与UUID相同的方式不一定是128位值的区域中具有长期使用。例如,RSS规范将GUID定义为您选择的任何字符串,只要它是唯一的,就带有“ isPermalink”属性,以指定您所使用的值只是返回到要联合的项目的永久链接。
SQL Server中的GUID与PostgreSQL中的UUID之间的区别是字母大小写。SQL Server输出较高,而PostgreSQL输出较低。
十六进制值“ a”至“ f”作为小写字符输出,并且在输入时不区分大小写。- rfc4122#部-3-