1008

これらの2つの頭字語が投げかけられているのを見て、GUIDとUUIDの間に違いがあるかどうか疑問に思いました。

4

6 に答える 6

948

簡単な答えは次のとおりです。**違いはありません。同じものです。

2020-08-20 更新: GUID (Microsoft によって使用される) と UUID (RFC4122 によって定義される) は似ており、同様の目的を果たしますが、微妙ではあるが時として重要な違いがあります。具体的には、一部の Microsoft GUID ドキュメントでは、GUID の任意の位置に任意の 16 進数を含めることができますが、RFC4122 ではversionおよびvariantフィールドに特定の値が必要です。また、[同じリンクごと]、GUID はすべて大文字にする必要がありますが、UUID は「小文字として出力し、入力時に大文字と小文字を区別しない」必要があります。これにより、コード ライブラリ ( this など) 間の非互換性が発生する可能性があります。

(元の回答が続きます)


一意の値として使用される 16 バイト (128 ビット) の値として扱います。Microsoft 用語では GUID と呼ばれますが、Microsoft 用語を使用しない場合は UUID と呼びます。

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 は Globally Unique Identifier (GUID) としても知られていますが、この用語はこの勧告では使用されていません。」

  • そして Microsoft は、GUID は UUID RFC によって指定されているとさえ主張しています。 ) は、Windows プロトコル仕様で GUID の同義語として使用されることがあります。」

しかし、正解は、「UUID」と書かれている場合の質問の意味によって異なります...

最初の部分は、質問者が「UUID」と言っているときに何を考えているかによって異なります。

Microsoft の主張は、すべての UUID が GUID であることを暗示しています。しかし、すべての GUID は実際の UUID ですか? つまり、すべての UUID のセットは、すべての GUID のセットの適切なサブセットですか、それともまったく同じセットですか?

RFC 4122 の詳細を見ると、UUID には 4 つの異なる「バリアント」があります。これは主に、これらの仕様が UUID 仕様の作成にまとめられる前に、そのような 16 バイトの識別子が使用されていたためです。RFC 4122のセクション 4.1.1 から、UUIDの 4 つのバリアントは次のとおりです。

  1. 予約済み、Network Computing System の下位互換性
  2. RFC 4122 で指定されたバリアント(「バージョン」と呼ばれる 5 つのサブバリアントがあります)
  3. 予約済み、Microsoft Corporation 下位互換性
  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 しか考えていない可能性があります(たとえば、MAC アドレス + 時間と、UUID の乱数アルゴリズムの形式を漠然と知っています。バリアント2 の両方のバージョンです)。その場合、答えはyesです。

そのため、答えは、質問者が「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 つの異なるフィールドを持つ構造体に格納できます。このフォーマットは、[UUID 規格] 8とは最初の 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
于 2011-08-05T08:01:48.497 に答える
690

GUID は、Microsoft による UUID 標準の実装です。

ウィキペディアごと:

GUID という用語は通常、 Universally Unique Identifier (UUID) 標準の Microsoft の実装を指します。

同じウィキペディアの記事からの更新された引用:

RFC 4122 自体は、UUID は「GUID とも呼ばれる」と述べています。これらすべてが示唆するのは、「GUID」は、もともと Microsoft が使用する UUID の変種を指していたものの、単に UUID の代替名になったことを示しています…</p>

于 2008-10-29T14:10:17.923 に答える
15

あまり。GUID はより Microsoft 中心であり、UUID はより広く使用されています (たとえば、urn:uuid: URN スキームや CORBA など)。

于 2008-10-29T14:10:59.327 に答える
8

GUID は、UUID と同じように必ずしも 128 ビット値ではない領域で長年使用されてきました。たとえば、RSS 仕様では、一意である限り任意の文字列を GUID として定義し、"isPermalink" 属性を使用して、使用している値がシンジケートされるアイテムへの単なるパーマリンクであることを指定します。

于 2012-07-05T16:26:24.293 に答える