มีความแตกต่างระหว่าง GUID และ UUID หรือไม่?


865

ฉันเห็นตัวย่อ 2 ตัวนี้โยนไปรอบ ๆ และฉันสงสัยว่ามีความแตกต่างระหว่าง GUID และ UUID หรือไม่


183
ฉันสามารถพูดว่า "GUID" ฉันไม่สามารถพูดว่า "UUID"
Hardwareguy

48
ฉันออกเสียง UUID ว่า "you-wid"
Matt Greer

106
ฉันพูดว่า "คุณ - คุณ - ฉัน - ดี" แต่ฉันไม่ได้เป็นเจ้าของภาษา ...
เหี่ยวแห้ง

20
ข้อมูลจำเพาะ UUID ( RFC-4122 ) กล่าวในบทคัดย่อ: ข้อกำหนดนี้กำหนด Namespace ชื่อทรัพยากรสำหรับ UUIDs (รหัสประจำตัวสากลที่ไม่ซ้ำกัน) หรือที่รู้จักกันในชื่อ GUID (รหัสประจำตัวสากล)
Tom

88
UUID นั้นมีความเป็นสากล (ขอบเขตจักรวาล) ในขณะที่ GUID นั้นมีความเป็นสากลเท่านั้น (ขอบเขตโลก) ทั้งสองมีความหลากหลายไม่เหมือนกันนั่นคือไม่ใช่ MUID มันหมายความว่าโดยหลักการแล้วคุณไม่ควรใช้ GUID ในช่วงระหว่างการวางแผน นอกจากนั้นพวกมันยังใช้แทนกันได้
rsp

คำตอบ:


816

คำตอบง่ายๆคือไม่มีความแตกต่างที่พวกเขาเป็นสิ่งเดียวกัน ถือว่าเป็นค่า 16 ไบต์ (128 บิต) ที่ใช้เป็นค่าเฉพาะ ใน Microsoft-speak พวกเขาจะเรียกว่า GUID แต่จะเรียกพวกเขาว่า UUID เมื่อไม่ได้ใช้ Microsoft-speak

แม้แต่ผู้เขียนข้อกำหนด UUID และ Microsoft ก็อ้างว่าเป็นคำพ้องความหมาย:

  • จากการแนะนำให้รู้จักกับ IETF RFC 4122 "ตัวระบุที่ไม่ซ้ำกันในระดับสากล (UUID) URN Namespace ": "Namespace ชื่อทรัพยากรที่เหมือนกันสำหรับ UUIDs (รหัสประจำตัวที่ไม่ซ้ำกันในระดับสากล) หรือที่รู้จักกันในชื่อ GUID

  • จากคำแนะนำของ ITU-T X.667, ISO / IEC 9834-8: 2004 มาตรฐานสากล : "UUID นั้นรู้จักกันในชื่อ Globally Unique Identifier (GUID) แต่คำนี้ไม่ได้ใช้ในคำแนะนำนี้"

  • และ Microsoft ยังอ้างว่า GUID ถูกระบุโดย UUID RFC: "ในการเขียนโปรแกรม Microsoft Windows และในระบบปฏิบัติการ Windows ตัวระบุที่ไม่ซ้ำกันทั่วโลก (GUID) ตามที่ระบุไว้ใน [RFC4122] คือ ... คำว่าตัวระบุที่เป็นสากล ) บางครั้งใช้ในข้อกำหนดคุณสมบัติโปรโตคอล Windows เป็นคำเหมือนสำหรับ GUID "

แต่คำตอบที่ถูกต้องขึ้นอยู่กับความหมายของคำถามเมื่อมีคำว่า "UUID" ...

ส่วนแรกขึ้นอยู่กับสิ่งที่ผู้ถามกำลังคิดเมื่อพวกเขาพูดว่า "UUID"

การอ้างสิทธิ์ของ Microsoft หมายถึง UUID ทั้งหมดเป็น GUID แต่ GUID ทั้งหมดเป็น UUID จริงหรือไม่ นั่นคือชุดของ UUID ทั้งหมดเป็นเซตย่อยที่เหมาะสมของชุดของ GUID ทั้งหมดหรือเป็นชุดเดียวกันหรือไม่

ดูรายละเอียดของ RFC 4122 มี "ตัวแปร" สี่แบบที่แตกต่างกันของ UUID นี่เป็นเพราะส่วนใหญ่ตัวระบุ 16 ไบต์ถูกใช้ก่อนที่ข้อมูลจำเพาะเหล่านั้นจะนำมารวมกันในการสร้างข้อกำหนด UUID จากส่วน 4.1.1 ของRFC 4122 ตัวแปรทั้งสี่ของ UUID คือ:

  1. สงวนไว้รองรับการใช้งานระบบเครือข่ายคอมพิวเตอร์ย้อนหลัง
  2. ตัวแปรที่ระบุไว้ใน RFC 4122 (ซึ่งมีห้าสายพันธุ์ย่อยซึ่งเรียกว่า "รุ่น")
  3. สงวนลิขสิทธิ์ Microsoft Corporation ใช้งานร่วมกันได้ย้อนหลัง
  4. สงวนไว้สำหรับคำจำกัดความในอนาคต

ตาม RFC 4122 ตัวแปร UUID ทั้งหมดเป็น "UUID จริง" จากนั้น GUID ทั้งหมดจะเป็น UUID จริง สำหรับคำถามที่แท้จริง "มีความแตกต่างระหว่าง GUID และ UUID หรือไม่" คำตอบนั้นไม่แน่นอนสำหรับ RFC 4122 UUIDs: ไม่มีความแตกต่าง (แต่ขึ้นอยู่กับส่วนที่สองด้านล่าง)

แต่ไม่ใช่ GUID ทั้งหมดที่เป็นตัวแปร 2 UUID (เช่น Microsoft COM มี GUID ซึ่งเป็นตัวแปร 3 UUID) หากคำถามคือ "มีความแตกต่างใด ๆ ระหว่าง GUID และตัวแปร 2 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 ของ octet 7 ตั้งค่าเป็น 1 และบิต 6 ของ octet 7 ตั้งค่าเป็น 0" ซึ่งหมายความว่าตัวแปร 2 UUID เท่านั้นที่สอดคล้องกับมาตรฐานนั้น (ค่าสองบิตเหล่านั้นหมายถึงตัวแปร 2) หากเป็นจริงแล้วไม่ใช่ GUID ทั้งหมดที่เป็นไปตาม ITU-T / ISO / IEC UUIDs เนื่องจาก UUID ที่เป็นไปตาม ITU-T / ISO / IEC UUIDs นั้นสามารถเป็นค่าตัวแปร 2 เท่านั้น

ดังนั้นคำตอบที่แท้จริงยังขึ้นอยู่กับข้อกำหนดของ UUID ที่คำถามนั้นถามด้วย สมมติว่าเรากำลังพูดถึง UUID ทั้งหมดอย่างชัดเจนและไม่ใช่แค่ตัวแปร 2 UUID: ไม่มีความแตกต่างระหว่าง UID ของ GUID และ IETF แต่แตกต่างกันระหว่าง GUID กับ UUID ของ ITU-T / ISO / IEC!

การเข้ารหัสแบบไบนารีอาจแตกต่างกัน

เมื่อเข้ารหัสในรูปแบบไบนารี (ตรงข้ามกับรูปแบบข้อความที่มนุษย์สามารถอ่านได้) 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

35
ให้ข้อมูลมากกว่าคำตอบที่เลือก ฉันคิดว่าคำตอบที่เลือกคือคำตอบที่ง่ายที่สุดสำหรับคำถามนี้
ใหม่ Alexandria

3
ตารางการเข้ารหัสแบบไบนารีที่ฝังอยู่ในคำตอบนั้นมีประโยชน์มาก Tnx
Luciano

2
'endianness' นั้นสำคัญมาก หากคุณเก็บรหัสเป็นไบต์คุณจะได้รับผลลัพธ์ที่แตกต่างจาก GUID และ UUID
Calabacin

และจินตนาการสิ่งมีชีวิตที่ติดอยู่ที่ 665 upvotes เท่านั้น! ฉันจะไม่ลงคะแนนในสิ่งนี้ได้อย่างไร
Haakon Løtveit

655

GUID เป็นการดำเนินการตามมาตรฐาน UUID ของ Microsoft

ตามWikipedia :

คำว่า GUID มักจะอ้างถึงการนำมาตรฐานสากลไปใช้ (UUID) ของ Microsoft

ใบเสนอราคาที่ปรับปรุงใหม่จากบทความ Wikipedia เดียวกัน:

RFC 4122 ระบุว่า UUIDs "รู้จักกันในชื่อ GUID" ด้วย ทั้งหมดนี้แสดงให้เห็นว่า "GUID" ในขณะที่การอ้างถึงตัวแปรของ UUID ที่ Microsoft ใช้นั้นเป็นชื่อทางเลือกสำหรับ UUID ...


39
(The G ย่อมาจาก Globally)
ted.strauss

487
เช่นเดียวกับไมโครซอฟท์ที่จะใช้สิ่งที่ทำงานได้ทุกที่ (จักรวาล) และทำให้การทำงานในส่วนย่อยขนาดเล็กมาก (โลก) :)
กัส

33
โปรดทราบว่าหากคุณต้องการแปลงจากการนำเสนอแบบไบนารี GUID ของ Microsoft เป็น UUID มาตรฐานคุณจะต้องพลิกกลับด้านของช่องข้อมูลสาม (สี่) แรกตามรายละเอียดในส่วน "การเข้ารหัสไบนารี" ที่นี่: en.wikipedia.org/ wiki / Globally_unique_identifier
ฟอร์ม

87
นี่คือเหตุผลที่นักบินอวกาศไม่ได้รับอนุญาตให้ติดตั้ง Windows บนสถานีอวกาศนานาชาติ
intuited

10
@bdukes ดูเหมือนว่า Wikipedia ได้เปลี่ยนสิ่งที่คุณอ้างถึงเป็นคำกล่าวของพวกเขา ตอนนี้อ่านแล้วThe term "GUID" typically refers to various implementations of the universally unique identifier (UUID) standard.
Khadim Ali

13

ไม่ได้จริงๆ GUID นั้นใช้ Microsoft เป็นศูนย์กลางมากกว่าในขณะที่ UUID ถูกใช้อย่างกว้างขวางมากขึ้น (เช่นในรูปแบบurn: uuid: URN และใน CORBA)


1
คำจำกัดความและผลกระทบของ Microsoft-centricity คืออะไร?
Karl Richter

8

GUID มีการใช้งานที่ยาวนานในพื้นที่ที่ไม่จำเป็นต้องมีค่า 128 บิตในแบบเดียวกับ UUID ตัวอย่างเช่นข้อกำหนด RSS กำหนด GUIDให้เป็นสตริงใด ๆ ที่คุณเลือกตราบใดที่มีลักษณะเฉพาะด้วยแอตทริบิวต์ "isPermalink" เพื่อระบุว่าค่าที่คุณใช้นั้นเป็นเพียงลิงก์ย้อนกลับไปยังรายการที่จะเผยแพร่


0

การGUIDแสดงข้อความของ Microsoft สามารถอยู่ในรูปของ UUID ที่ถูกล้อมรอบด้วยเครื่องหมายปีกกาสอง{}อัน


6
นี่เป็นเพียงการแสดงข้อความของ GUID เท่านั้น โครงสร้างที่แท้จริงแตกต่างกัน
ไม่ระบุชื่อ

-2

ความแตกต่างอย่างหนึ่งระหว่าง GUID ใน SQL Server และ UUID ใน PostgreSQL คือกรณีตัวอักษร SQL Server จะแสดงผลด้านบนในขณะที่ PostgreSQL จะให้ผลลัพธ์ต่ำกว่า

ค่าเลขฐานสิบหก "a" ถึง "f" เป็นเอาต์พุตเป็นอักขระตัวพิมพ์เล็กและไม่คำนึงถึงขนาดตัวพิมพ์ของอินพุต - rfc4122 # section-3

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.