当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《GUID和UUID之间有什么区别吗?》经验,为你挑选了4个好方法。

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



1> Hoylen..:

简单的答案是:没有区别,它们是同一个东西.将它们视为16字节(128位)值,用作唯一值.在Microsoft中,它们被称为GUID,但在不使用Microsoft时称其​​为UUID.

甚至UUID规范的作者和微软都声称他们是同义词:

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

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

微软甚至声称 UUID RFC指定了GUID:"在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 的四个变体是:

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

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

    保留,Microsoft Corporation向后兼容

    保留供将来定义.

根据RFC 4122,所有UUID 变体都是"真正的UUID",然后所有GUID都是真正的UUID.对于文字问题"GUID和UUID之间是否有任何区别",对于RFC 4122 UUID,答案肯定是否定的:没有区别(但受下面第二部分的影响).

但并非所有GUID都是变体 2 UUID(例如,Microsoft COM具有变体3 UUID的GUID).如果问题是"GUID和变体2 UUID之间有什么区别",那么答案是肯定的 - 它们可以是不同的.有人问这个问题可能不知道变种,他们可能只考虑变体 2 UUID,当他们说"UUID"这个词时(例如他们模糊地知道UUID的MAC地址+时间和随机数算法形式,其中既版本变种 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


比选择的答案更有用的信息.不过,我认为所选答案是问题的绝对最简单的答案.
嵌入在答案中的二进制编码表非常有用.TNX
'endianness'非常重要.如果将id存储为字节,您将从GUID和UUID获得不同的结果.

2> bdukes..:

GUID是Microsoft对UUID标准的实现.

每个维基百科:

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

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

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


就像微软采取适用于所有地方(宇宙)的东西,让它在一个非常小的子集(全球)中工作:)
这就是宇航员不允许在国际空间站上安装Windows的原因.
(G代表全球)
请注意,如果要从Microsoft的GUID二进制表示形式转换为标准UUID,则必须翻转前三个(四个)数据字段的字节顺序,详见"二进制编码"部分:http:// en. wikipedia.org/wiki/Globally_unique_identifier
@bdukes似乎维基百科改变了你所说的他们的陈述.它现在读作`术语"GUID"通常是指通用唯一标识符(UUID)标准的各种实现
除非发生了这种情况,否则直到Microsoft开始使用GUID之后才会创建标准.
就像微软采取其他人出现的东西,已经完美运作,用一个新名称开发一个竞争的劣质标准,然后让我们浪费一些时间试图弄清楚为什么......

3> Mark Cidade..:

并不是的.GUID更加以微软为中心,而UUID被更广泛地使用(例如,在urn:uuid: URN方案和CORBA中).



4> 小智..:

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

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有