UTF-8เป็นการเข้ารหัสความยาวผันแปรได้ ในกรณีของ UTF-8 หมายความว่าการจัดเก็บจุดรหัสหนึ่งจุดต้องใช้หนึ่งถึงสี่ไบต์ อย่างไรก็ตามการเข้ารหัสของ MySQL เรียกว่า "utf8" (นามแฝงของ "utf8mb3") เก็บได้สูงสุดสามไบต์ต่อหนึ่งจุดรหัสเท่านั้น
ดังนั้นชุดอักขระ "utf8" / "utf8mb3" ไม่สามารถเก็บคะแนนโค้ด Unicode ทั้งหมด: สนับสนุนเฉพาะช่วง 0x000 ถึง 0xFFFF ซึ่งเรียกว่า " Basic Multilingual Plane " ดูเพิ่มเติมเปรียบเทียบการเข้ารหัส Unicode
นี่คือสิ่งที่ (รุ่นก่อนหน้าของหน้าเดียวกัน) เอกสาร MySQLมีการพูดเกี่ยวกับมัน:
ชุดอักขระชื่อ utf8 [/ utf8mb3] ใช้สูงสุดสามไบต์ต่อตัวอักษรและมีอักขระ BMP เท่านั้น ในฐานะของ MySQL 5.5.3 ชุดอักขระ utf8mb4 ใช้สูงสุดสี่ไบต์ต่ออักขระสนับสนุนอักขระเพิ่มเติม:
สำหรับอักขระ BMP utf8 [/ utf8mb3] และ utf8mb4 มีลักษณะหน่วยเก็บข้อมูลที่เหมือนกัน: ค่ารหัสเดียวกันการเข้ารหัสเดียวกันความยาวเท่ากัน
สำหรับอักขระเสริมutf8 [/ utf8mb3] ไม่สามารถจัดเก็บอักขระได้ทั้งหมดในขณะที่ utf8mb4 ต้องการสี่ไบต์เพื่อจัดเก็บ เนื่องจาก utf8 [/ utf8mb3] ไม่สามารถเก็บอักขระได้เลยคุณไม่มีอักขระเสริมในคอลัมน์ utf8 [/ utf8mb3] และคุณไม่จำเป็นต้องกังวลเกี่ยวกับการแปลงอักขระหรือสูญเสียข้อมูลเมื่ออัปเกรด utf8 [/ utf8mb3] MySQL
ดังนั้นหากคุณต้องการให้คอลัมน์ของคุณรองรับการจัดเก็บอักขระที่อยู่นอก BMP (และคุณมักต้องการ) เช่นemojiให้ใช้ "utf8mb4" ดูเพิ่มเติมอักขระที่ไม่ใช่ BMP Unicode ทั่วไปที่ใช้บ่อยที่สุดคืออะไร .