Có sự khác biệt nào giữa GUID và UUID không?


865

Tôi thấy 2 từ viết tắt được ném xung quanh, và tôi đã tự hỏi liệu có sự khác biệt nào giữa GUID và UUID không?


183
Tôi có thể nói "GUID", tôi không thể nói "UUID".
Phần cứng

48
Tôi phát âm UUID là "you-wid"
Matt Greer

106
Tôi nói "you-you-I-dee", nhưng tôi không phải là người bản ngữ ...
Héo

20
Đặc tả UUID ( RFC-4122 ) nói tóm tắt: Thông số kỹ thuật này xác định không gian tên Tên tài nguyên thống nhất cho UUID (IDentifier duy nhất toàn cầu), còn được gọi là GUID (IDentifier duy nhất toàn cầu)
Tom

88
UUID là duy nhất trên toàn cầu (phạm vi vũ trụ) trong khi GUID chỉ là duy nhất trên toàn cầu (phạm vi toàn cầu). Không phải là duy nhất trên nhiều phương diện, tức là chúng không PHẢI. Điều đó có nghĩa là về nguyên tắc bạn không nên sử dụng GUID một cách liên tục. Ngoài ra, chúng có thể thay thế cho nhau.
rsp

Câu trả lời:


817

Các câu trả lời đơn giản là: có sự khác biệt , họ là những điều tương tự. Xử lý chúng như một giá trị 16 byte (128 bit) được sử dụng làm giá trị duy nhất. Trong Microsoft-speak, chúng được gọi là GUID, nhưng gọi chúng là UUID khi không sử dụng Microsoft-speak.

Ngay cả các tác giả của đặc tả UUID và Microsoft tuyên bố họ là từ đồng nghĩa:

  • Từ phần giới thiệu cho IETF RFC 4122 " Không gian nhận dạng duy nhất toàn cầu (UUID) URN ": "một không gian tên Tên tài nguyên thống nhất cho UUID (IDentifier duy nhất toàn cầu), còn được gọi là GUIDs (IDentifier duy nhất toàn cầu)."

  • Từ Khuyến nghị ITU-T X.667, Tiêu chuẩn quốc tế ISO / IEC 9834-8: 2004 : "UUID còn được gọi là Định danh duy nhất toàn cầu (GUID), nhưng thuật ngữ này không được sử dụng trong Khuyến nghị này."

  • Và Microsoft thậm chí còn tuyên bố GUID được UUID RFC chỉ định: "Trong lập trình Microsoft Windows và trong các hệ điều hành Windows, số nhận dạng duy nhất toàn cầu (GUID), như được chỉ định trong [RFC4122], là ... Thuật ngữ định danh duy nhất toàn cầu (UUID ) đôi khi được sử dụng trong các đặc tả giao thức Windows như một từ đồng nghĩa với GUID. "

Nhưng câu trả lời đúng phụ thuộc vào ý nghĩa của câu hỏi khi nó nói "UUID" ...

Phần đầu tiên phụ thuộc vào những gì người hỏi đang nghĩ khi họ nói "UUID".

Yêu cầu của Microsoft ngụ ý rằng tất cả các UUID là GUID. Nhưng tất cả các GUID có phải là UUID thật không? Đó là, tập hợp tất cả các UUID chỉ là một tập hợp con đúng của tập hợp tất cả các GUID, hay nó là tập hợp chính xác?

Nhìn vào các chi tiết của RFC 4122, có bốn "biến thể" khác nhau của UUID. Điều này chủ yếu là do các định danh 16 byte như vậy đã được sử dụng trước khi các thông số kỹ thuật đó được kết hợp với nhau trong việc tạo ra một đặc tả UUID. Từ phần 4.1.1 của RFC 4122 , bốn biến thể của UUID là:

  1. Bảo lưu, hệ thống tính toán mạng tương thích ngược
  2. Các biến thể quy định trong RFC 4122 (trong đó có năm tiểu biến thể, được gọi là "phiên bản")
  3. Dành riêng, Microsoft Corporation tương thích ngược
  4. Dành cho định nghĩa trong tương lai.

Theo RFC 4122, tất cả các biến thể UUID là "UUID thực", sau đó tất cả các GUID đều là UUID thực. Đối với câu hỏi theo nghĩa đen "có sự khác biệt nào giữa GUID và UUID không", câu trả lời chắc chắn là không dành cho RFC 4122 UUID: không có sự khác biệt (nhưng phải tuân theo phần thứ hai bên dưới).

Nhưng không phải tất cả các GUID đều là 2 UUID biến thể (ví dụ: Microsoft COM có GUID là 3 UUID biến thể). Nếu câu hỏi là "có sự khác biệt nào giữa GUID và 2 UUID biến thể không", thì câu trả lời sẽ là có - chúng có thể khác nhau. Ai đó đặt câu hỏi có lẽ không biết về các biến thể và họ có thể chỉ nghĩ về 2 UUID biến thể khi họ nói từ "UUID" (ví dụ họ mơ hồ biết về địa chỉ MAC + thời gian và các dạng thuật toán số ngẫu nhiên của UUID, là cả hai phiên bản của biến thể 2). Trong trường hợp đó, câu trả lời là có khác nhau .

Vì vậy, câu trả lời, một phần, phụ thuộc vào những gì người hỏi đang nghĩ khi họ nói từ "UUID". Họ có nghĩa là biến thể 2 UUID (vì đó là biến thể duy nhất họ biết) hoặc tất cả các UUID?

Phần thứ hai phụ thuộc vào đặc điểm kỹ thuật nào được sử dụng như định nghĩa của UUID.

Nếu bạn cho rằng điều đó gây nhầm lẫn, hãy đọc ITU-T X.667 ISO / IEC 9834-8: 2004 được cho là phù hợp và hoàn toàn tương thích về mặt kỹ thuật với RFC 4122 . Nó có thêm một câu trong Điều 11.2 có nội dung: "Tất cả các UUID tuân thủ Khuyến nghị này | Tiêu chuẩn quốc tế sẽ có các bit biến thể với bit 7 của octet 7 được đặt thành 1 và bit 6 của octet 7 được đặt thành 0". Điều đó có nghĩa là chỉ có biến thể 2 UUID phù hợp với Tiêu chuẩn đó (hai giá trị bit đó có nghĩa là biến thể 2). Nếu đó là sự thật, thì không phải tất cả các GUID đều tuân thủ các UUID ITU-T / ISO / IEC, bởi vì các UUID ITU-T / ISO / IEC tuân thủ chỉ có thể là 2 giá trị biến thể .

Do đó, câu trả lời thực sự cũng phụ thuộc vào đặc điểm kỹ thuật của UUID mà câu hỏi đang hỏi về. Giả sử chúng ta đang nói rõ ràng về tất cả UUIDs và không chỉ biến thể 2 UUIDs: có có sự khác biệt giữa GUID và IETF của UUIDs, nhưng có sự khác biệt giữa GUID và phù hợp với ITU-T UUIDs / ISO / IEC!

Mã hóa nhị phân có thể khác nhau

Khi được mã hóa dưới dạng nhị phân (trái ngược với định dạng văn bản có thể đọc được của con người), GUID có thể được lưu trữ trong một cấu trúc với bốn trường khác nhau như sau. Định dạng này khác với tiêu chuẩn UUID chỉ theo thứ tự byte của 3 trường đầu tiên.

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

35
Nhiều thông tin hơn câu trả lời được chọn. Tôi nghĩ rằng câu trả lời được chọn là câu trả lời đơn giản tuyệt đối cho câu hỏi, mặc dù.
New Alexandria

3
Bảng mã hóa nhị phân được nhúng trong câu trả lời là rất hữu ích. Tnx
Luciano

2
'Endianness' là rất quan trọng. Nếu bạn lưu trữ id dưới dạng byte, bạn sẽ nhận được kết quả khác nhau từ GUID và UUID.
Calabacin

Và hãy tưởng tượng, chúng sinh bị mắc kẹt tại chỉ 665 upvote! Làm thế nào tôi có thể không upvote này?
Haakon Løtveit

656

GUID là triển khai của Microsoft về tiêu chuẩn UUID.

Theo Wikipedia :

Thuật ngữ GUID thường đề cập đến việc Microsoft thực hiện tiêu chuẩn Định danh duy nhất toàn cầu (UUID).

Một trích dẫn được cập nhật từ cùng một bài viết Wikipedia:

Bản thân RFC 4122 tuyên bố rằng UUID "còn được gọi là GUID". Tất cả điều này cho thấy rằng "GUID", trong khi ban đầu đề cập đến một biến thể của UUID được Microsoft sử dụng, đã trở thành một tên thay thế cho UUID chế


40
(Chữ G là viết tắt của Globally)
ted.strauss

487
Giống như microsoft để lấy thứ gì đó hoạt động ở mọi nơi (vũ trụ) và làm cho nó hoạt động trong một tập hợp rất nhỏ (quả địa cầu) :)
Gus

33
Lưu ý rằng nếu bạn muốn chuyển đổi từ biểu diễn nhị phân GUID của Microsoft sang UUID tiêu chuẩn, bạn sẽ phải lật lại thời gian tồn tại của ba (bốn) trường dữ liệu đầu tiên như chi tiết trong phần "Mã hóa nhị phân" tại đây: en.wikipedia.org/ wiki / Globally_unique_identifier
Mẫu

87
Đây là lý do tại sao các phi hành gia không được phép cài đặt Windows trên ISS.
trực giác

10
@bdukes Có vẻ Wikipedia đã thay đổi những gì bạn gọi là tuyên bố của họ. Bây giờ nó đọcThe term "GUID" typically refers to various implementations of the universally unique identifier (UUID) standard.
Khadim Ali

13

Không hẳn vậy. GUID tập trung vào Microsoft hơn trong khi UUID được sử dụng rộng rãi hơn (ví dụ như trong sơ đồ urn: uuid: URN và trong CORBA).


1
Định nghĩa và ảnh hưởng của Microsoft-centricity là gì?
Karl Richter

8

GUID sử dụng lâu dài ở những khu vực không nhất thiết phải là giá trị 128 bit giống như UUID. Ví dụ: đặc tả RSS xác định GUID là bất kỳ chuỗi nào bạn chọn, miễn là nó là duy nhất, với thuộc tính "isPermalink" để xác định rằng giá trị bạn đang sử dụng chỉ là một permalink cho mục được cung cấp.


0

GUIDĐại diện văn bản của Microsoft có thể ở dạng UUID được bao quanh bởi hai dấu ngoặc nhọn {}.


6
Điều này chỉ dành cho một đại diện bằng văn bản của GUID. Cấu trúc thực tế là khác nhau.
ẩn danh

-2

Một điểm khác biệt giữa GUID trong SQL Server và UUID trong PostgreSQL là trường hợp chữ cái; Máy chủ SQL xuất ra trên trong khi PostgreSQL xuất thấp hơn.

Các giá trị thập lục phân "a" đến "f" là đầu ra dưới dạng ký tự chữ thường và không phân biệt chữ hoa chữ thường trên đầu vào. - rfc4122 # phần 3

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.