天天看點

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的文本表示。實際結構不同。