GUID和UUID之间有什么区别吗?

时间:2008-10-29 14:09:09

标签: guid uuid

我看到这两个缩略词被抛出,我想知道GUID和UUID之间是否有任何差异?

6 个答案:

答案 0 :(得分:726)

简单回答是:没有区别,它们是一回事。将它们视为16字节(128位)值,用作唯一值。在Microsoft中,它们被称为GUID,但在不使用Microsoft时会将其称为UUID。

即使是UUID规范的作者和微软也声称他们是同义词:

  • 从IETF的介绍RFC 4122一个通用唯一标识符(UUID)URN命名空间”:“UUID的统一资源名称命名空间(通用唯一标识符),也是称为GUID(全球唯一标识符)。“

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

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

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

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

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

查看RFC 4122的详细信息,UUID有四种不同的“变体”。这主要是因为在创建UUID规范之前将这些规范集合在一起之前使用了这样的16字节标识符。从RFC 4122的第4.1.1节开始,UUID的四个变体是:

  1. 保留,网络计算系统向后兼容性
  2. RFC 4122中指定的变体(其中有五个子变体,称为“版本”)
  3. 保留,Microsoft Corporation向后兼容性
  4. 保留供将来定义。
  5. 根据RFC 4122,所有UUID 变种都是“真正的UUID”,那么所有GUID都是真正的UUID。对于文字问题“GUID和UUID之间有什么区别”,RFC 4122 UUID的答案肯定是否定的:没有区别(但受第二部分的影响)。

    但并非所有GUID都是 variant 2 UUID(例如Microsoft COM具有变体3 UUID的GUID)。如果问题是“GUID和变体2 UUID之间有什么区别”,那么答案是肯定的 - 它们可以是不同的。有人问这个问题可能不知道 variants ,当他们说“UUID”这个词时,他们可能只会想到 variant 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”。这意味着只有 variant 2 UUID符合该标准(这两个位值意味着 variant 2)。如果确实如此,那么并非所有GUID都符合ITU-T / ISO / IEC UUID,因为符合ITU-T / ISO / IEC UUID的只能是变量 2值。

    因此,真正的答案还取决于问题所针对的UUID规范。假设我们清楚地谈论所有UUID而不仅仅是变体2 UUID:GUID和IETF的UUID之间存在无差异,但GUID和之间的是差异符合< / em> ITU-T / ISO / IEC的UUID!

    二进制编码可能有所不同

    当以二进制编码(与人类可读的文本格式相反)时,GUID may be stored在具有四个不同字段的结构中如下。此格式与UUID standard的不同之处仅在于前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
    

答案 1 :(得分:636)

GUID是Microsoft对UUID标准的实现。

Wikipedia

  

术语GUID通常是指Microsoft对Universally Unique Identifier(UUID)标准的实现。

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

  

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

答案 2 :(得分:14)

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

答案 3 :(得分:7)

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

答案 4 :(得分:1)

Microsoft的guid可以是由两个大括号{}包围的uuid形式......

答案 5 :(得分:-1)

SQL Server中的GUID与PostgreSQL中的UUID之间的区别是字母大小写; SQL Server输出较高,而PostgreSQL输出较低。

十六进制值“ a”至“ f”以小写字母形式输出,并且在输入时不区分大小写。 -rfc4122#section-3