私はこれらの2つの頭字語が飛び交っているのを見て、GUIDとUUIDの間に何か違いがあるのだろうかと思っていましたか?
私はこれらの2つの頭字語が飛び交っているのを見て、GUIDとUUIDの間に何か違いがあるのだろうかと思っていましたか?
回答:
簡単な答えはありません:何の違い、彼らは同じものです。それらを、固有の値として使用される16バイト(128ビット)の値として扱います。Microsoft-speakではGUIDと呼ばれますが、Microsoft-speakを使用しない場合はGUIDと呼びます。
UUID仕様の作成者とMicrosoftでさえ、それらは同義語であると主張しています。
IETF RFC 4122の紹介から「Universally Unique IDentifier(UUID)URN Namespace」:「GUID(Globally Unique IDentifier)としても知られるUUID(Universally Unique IDentifier)のUniform Resource Name名前空間。」
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には4つの異なる「バリアント」があります。これは主に、これらの仕様がUUID仕様の作成に統合される前に、そのような16バイトの識別子が使用されていたためです。RFC 4122のセクション4.1.1から、UUID の4つのバリアントは次のとおりです。
RFC 4122によると、すべてのUUID バリアントは「実際のUUID」であり、すべてのGUIDは実際のUUIDです。「GUIDとUUIDの間に違いはありますか」という文字通りの質問に対する答えは、RFC 4122 UUIDの場合は間違いなくあります。違いはありません(ただし、以下の2番目の部分が適用されます)。
ただし、すべてのGUIDがバリアント 2 UUIDであるとは限りません(たとえば、Microsoft COMには、バリアント3 UUIDであるGUIDがあります)。質問が「GUIDとバリアント2のUUIDの間に何か違いがあるか」である場合、答えは「はい」になります。それらは異なる場合があります。質問をしている人はおそらくバリアントについて知らず、彼らが「UUID」という言葉を言うとき、彼らはバリアント 2 UUID だけを考えているかもしれません(たとえば、彼らは漠然とUUIDのMACアドレス+時間と乱数アルゴリズム形式を知っています。バリアント 2の両方のバージョンです)。その場合、答えは「はい」と異なります。
したがって、答えは、部分的には、尋ねる人が「UUID」という言葉を言うときに何を考えているかに依存します。それらは、バリアント2 UUIDを意味しますか(それが認識している唯一のバリアントであるため)、またはすべてのUUIDですか?
2番目の部分は、UUIDの定義として使用されている仕様によって異なります。
混乱していると思われる場合は、ITU-T X.667 ISO / IEC 9834-8:2004をお読みください。このガイドは、RFC 4122と完全に技術的に互換性があり、調整されているはずです。条項11.2に「この推奨事項に準拠するすべてのUUID |国際標準には、オクテット7のビット7が1に設定され、オクテット7のビット6が0に設定されたバリアントビットが含まれる」という追加の文があります。つまり、バリアント 2 UUID のみがその標準に準拠していることになります(これらの2つのビット値はバリアント 2を意味します)。これが当てはまる場合は、すべてのGUIDがITU-T / ISO / IEC UUIDに準拠しているわけではありません。準拠しているITU-T / ISO / IEC UUIDは、バリアント 2の値にしかできないためです。
したがって、実際の答えは、質問が尋ねているUUIDの仕様によっても異なります。バリアント2 UUIDだけでなく、すべてのUUIDについて明確に話していると仮定します。GUIDとIETFのUUID には違いはありませんが、GUIDと準拠する ITU-T / ISO / IECのUUIDには違いがあります。
バイナリエンコーディングは異なる場合があります
(人間が読み取れるテキスト形式ではなく)バイナリでエンコードされている場合、GUID は次の4つの異なるフィールドを持つ構造に格納できます。この形式は、最初の3つのフィールドのバイト順のみがUUID標準と異なります。
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によるUniversally Unique Identifier(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はよりMicrosoft中心ですが、UUIDはより広く使用されています(たとえば、urn:uuid: URNスキームやCORBAなど)。
GUIDは、UUIDと同じように必ずしも128ビット値である必要がない領域で長年使用されています。たとえば、RSS仕様では、GUIDが一意である限り、任意の文字列になるようにGUIDを定義し、「isPermalink」属性を使用して、使用している値がシンジケートされるアイテムへのパーマリンクにすぎないことを指定します。
SQL ServerのGUIDとPostgreSQLのUUIDの違いの1つは、大文字と小文字です。SQL Serverは上限を出力し、PostgreSQLは下限を出力します。
16進値 "a"から "f"は小文字として出力され、入力では大文字と小文字は区別されません。- rfc4122の#セクション-3