ฉันเห็นตัวย่อ 2 ตัวนี้โยนไปรอบ ๆ และฉันสงสัยว่ามีความแตกต่างระหว่าง GUID และ UUID หรือไม่
ฉันเห็นตัวย่อ 2 ตัวนี้โยนไปรอบ ๆ และฉันสงสัยว่ามีความแตกต่างระหว่าง GUID และ UUID หรือไม่
คำตอบ:
คำตอบง่ายๆคือไม่มีความแตกต่างที่พวกเขาเป็นสิ่งเดียวกัน ถือว่าเป็นค่า 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 คือ:
ตาม 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
GUID เป็นการดำเนินการตามมาตรฐาน UUID ของ Microsoft
ตามWikipedia :
คำว่า GUID มักจะอ้างถึงการนำมาตรฐานสากลไปใช้ (UUID) ของ Microsoft
ใบเสนอราคาที่ปรับปรุงใหม่จากบทความ Wikipedia เดียวกัน:
RFC 4122 ระบุว่า UUIDs "รู้จักกันในชื่อ GUID" ด้วย ทั้งหมดนี้แสดงให้เห็นว่า "GUID" ในขณะที่การอ้างถึงตัวแปรของ UUID ที่ Microsoft ใช้นั้นเป็นชื่อทางเลือกสำหรับ UUID ...
The term "GUID" typically refers to various implementations of the universally unique identifier (UUID) standard.
ไม่ได้จริงๆ GUID นั้นใช้ Microsoft เป็นศูนย์กลางมากกว่าในขณะที่ UUID ถูกใช้อย่างกว้างขวางมากขึ้น (เช่นในรูปแบบurn: uuid: URN และใน CORBA)
GUID มีการใช้งานที่ยาวนานในพื้นที่ที่ไม่จำเป็นต้องมีค่า 128 บิตในแบบเดียวกับ UUID ตัวอย่างเช่นข้อกำหนด RSS กำหนด GUIDให้เป็นสตริงใด ๆ ที่คุณเลือกตราบใดที่มีลักษณะเฉพาะด้วยแอตทริบิวต์ "isPermalink" เพื่อระบุว่าค่าที่คุณใช้นั้นเป็นเพียงลิงก์ย้อนกลับไปยังรายการที่จะเผยแพร่
การGUID
แสดงข้อความของ Microsoft สามารถอยู่ในรูปของ UUID ที่ถูกล้อมรอบด้วยเครื่องหมายปีกกาสอง{}
อัน
ความแตกต่างอย่างหนึ่งระหว่าง GUID ใน SQL Server และ UUID ใน PostgreSQL คือกรณีตัวอักษร SQL Server จะแสดงผลด้านบนในขณะที่ PostgreSQL จะให้ผลลัพธ์ต่ำกว่า
ค่าเลขฐานสิบหก "a" ถึง "f" เป็นเอาต์พุตเป็นอักขระตัวพิมพ์เล็กและไม่คำนึงถึงขนาดตัวพิมพ์ของอินพุต - rfc4122 # section-3