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?
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?
Câu trả lời:
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à:
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
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ế
The term "GUID" typically refers to various implementations of the universally unique identifier (UUID) standard.
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).
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.
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 {}
.
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