ESC
Developer

UUID คืออะไร? คู่มือนักพัฒนาเกี่ยวกับ Unique Identifiers

เรียนรู้ว่า UUID คืออะไร เวอร์ชันต่างๆ ทำงานอย่างไร เมื่อไหร่ควรใช้ และวิธีสร้างใน JavaScript, Python, PHP และ SQL

2026-06-25 8 min read Developer
UUID Guide: A Developer's Guide to Unique Identifiers

UUID คืออะไร?

UUID (Universally Unique Identifier) คือตัวระบุ 128 บิตที่ออกแบบให้ไม่ซ้ำกันในทั้งพื้นที่และเวลา — โดยไม่ต้องการหน่วยงานกลางในการจัดสรร ผลลัพธ์คือสตริง 36 ตัวอักษรในรูปแบบ:

550e8400-e29b-41d4-a716-446655440000

เข้ารหัสตัวเลขฐาน 16 จำนวน 32 ตัวแบ่งเป็น 5 กลุ่มคั่นด้วยยัติภังค์: 8-4-4-4-12

ความน่าจะเป็นในการชนกัน: ด้วย UUID v4 ความน่าจะเป็นในการสร้าง ID ที่เหมือนกันสองตัวคือประมาณ 1 ใน 5.3×1036 ในทางปฏิบัติคุณจะไม่เจอการชนกันในระบบจริง

เวอร์ชัน UUID อธิบาย

UUID v1 — เวลา + MAC address

รวม timestamp ปัจจุบันกับ MAC address ของการ์ดเครือข่าย เรียงตามลำดับเวลาแต่เปิดเผย MAC address และ timestamp ที่แน่นอน — เป็นปัญหาความเป็นส่วนตัว

UUID v4 — สุ่ม (พบบ่อยที่สุด)

เติม 122 บิตด้วยข้อมูลสุ่มที่ปลอดภัยทางการเข้ารหัส ไม่ต้องการสถานะ เครือข่าย หรือการประสานงาน ตัวเลือกเริ่มต้นสำหรับส่วนใหญ่ของกรณีการใช้งาน

UUID v5 — Namespace + SHA-1

กำหนดได้แน่นอน: namespace + ชื่อเดิม = UUID เดิมเสมอ ชอบ v5 มากกว่า v3 (MD5 ล้าสมัยแล้ว)

UUID v7 — เรียงตามเวลา (มาตรฐานใหม่)

ใช้ Unix timestamp ระดับมิลลิวินาทีใน bits ที่มีนัยสำคัญสูงสุด UUID สามารถเรียงลำดับได้และปรับปรุงประสิทธิภาพ B-tree index ของฐานข้อมูลอย่างมาก

สำหรับ primary key ของฐานข้อมูล: ชอบ UUID v7 ลักษณะที่เรียงตามเวลาป้องกันการแตกแฟรกเมนต์ของ index

ทำไมต้องใช้ UUID?

  • ไม่ต้องประสานงานกลาง: ไคลเอนต์หรือ microservice ใดก็สามารถสร้าง UUID ได้อย่างอิสระ
  • ความปลอดภัยด้วยความคลุมเครือ: ID จำนวนเต็มแบบลำดับเปิดเผยปริมาณข้อมูล UUID ไม่เปิดเผยอะไร
  • การรวมฐานข้อมูล: ตาราง UUID key รวมกันโดยไม่มีความขัดแย้ง
  • การสร้างออฟไลน์: แอปมือถือสามารถสร้างระเบียนออฟไลน์และซิงค์ในภายหลัง
  • มาตรฐานอุตสาหกรรม: รองรับในทุกฐานข้อมูลและเฟรมเวิร์คหลัก

เมื่อไหร่ไม่ควรใช้ UUID?

  • ค่าใช้จ่ายในการจัดเก็บ: ใช้ BINARY(16) ใน MySQL หรือประเภท uuid ของ PostgreSQL แทน VARCHAR(36)
  • URL slug: ยาวเกินไปและจำยาก ใช้ slug ที่อ่านได้สำหรับ URL ที่ผู้ใช้เห็น
  • การแตกแฟรกเมนต์ index ด้วย v4: สำหรับตารางที่มีการเขียนสูง ใช้ UUID v7 หรือ ULID
เคล็ดลับ MySQL: อย่าเก็บ UUID เป็น VARCHAR(36) ในตารางที่มีปริมาณมาก ใช้ BINARY(16) กับ UUID_TO_BIN(uuid, 1)

สร้าง UUID ในโค้ด

JavaScript

const id = crypto.randomUUID(); // v4

Python

import uuid; id = str(uuid.uuid4())

PHP

use Ramsey\Uuid\Uuid;
$v4 = Uuid::uuid4()->toString();
$v7 = Uuid::uuid7()->toString();

SQL

-- MySQL: SELECT UUID();
-- PostgreSQL: SELECT gen_random_uuid();

แนวปฏิบัติที่ดีที่สุด

  • เก็บเป็น binary: BINARY(16) หรือประเภท uuid ของ PostgreSQL
  • ใช้ v4 สำหรับกรณีส่วนใหญ่
  • ใช้ v7 สำหรับ primary key ของฐานข้อมูล
  • หลีกเลี่ยง v1 ในบริบทที่ละเอียดอ่อนด้านความเป็นส่วนตัว
  • ตรวจสอบรูปแบบ UUID ที่ input
  • ใช้ตัวพิมพ์เล็กเสมอ
ต้องการสร้าง UUID ตอนนี้เลย? UUID Generator ของเราสร้าง UUID v4 และ v7 เป็นชุดได้ทันที

คำถามที่พบบ่อย

UUID สองตัวสามารถเหมือนกันได้ไหม?

ในทางทฤษฎีใช่ ความน่าจะเป็นในการชนกันของ v4 คือประมาณ 1 ใน 5.3×1036 ในทางปฏิบัติคุณจะไม่เจอการชนกันในระบบจริงใดๆ

v4 หรือ v7 สำหรับ primary key ของฐานข้อมูล?

v7 สำหรับ primary key v4 แทรกในตำแหน่งสุ่มใน B-tree index และลดประสิทธิภาพที่ scale ใหญ่ v7 รับประกันการแทรกที่ท้าย index

UUID แยกความแตกต่างตัวพิมพ์ใหญ่เล็กไหม?

ไม่ สเปคไม่แยกความแตกต่าง ตามแบบแผนให้ใช้ตัวพิมพ์เล็กเสมอ

สร้าง UUID ทันที

สร้าง UUID v4 หรือ v7 จำนวนมาก คัดลอกไปยังคลิปบอร์ดและใช้ในโปรเจกต์ — ไม่มีเซิร์ฟเวอร์ ไม่มีการติดตาม 100% ฝั่งไคลเอนต์

เปิด UUID Generator