ปัญหา
เมื่อ INSERT ข้อมูลที่มี Single Quote (') เช่น Chris's Brown แล้ว SELECT ออกมา ตัวอักษรอาจแสดงผิดหรือหายไป หาก Collation ไม่รองรับ Unicode อย่างถูกต้อง
สร้างตารางและตั้ง Collation
mysql> create table DemoTable2000 ( Name varchar(20) );
mysql> ALTER TABLE DemoTable2000 COLLATE='utf8_unicode_ci'; Query OK, 0 rows affected (0.90 sec)
INSERT ข้อมูลที่มี Single Quote
mysql> insert into DemoTable2000 values('Chris's Brown');
mysql> insert into DemoTable2000 values('David's Miller');
mysql> insert into DemoTable2000 values('Robert's Downey');
ผลลัพธ์ (แสดง Single Quote ถูกต้อง)
+-------------------+ | Name | +-------------------+ | Chris's Brown | | David's Miller | | Robert's Downey | +-------------------+
คำอธิบายเกี่ยวกับ Collation
- Collation กำหนดกฎการจัดเรียงและเปรียบเทียบตัวอักษร (Sorting & Comparison Rules)
utf8_unicode_ci: ใช้ Unicode Collation Algorithm (UCA) รองรับหลายภาษา, Case-Insensitiveutf8_general_ci: เร็วกว่าแต่แม่นยำน้อยกว่าสำหรับภาษาบางภาษา (Deprecated ใน MySQL 8.0+)utf8mb4_unicode_ci: แนะนำสำหรับ MySQL 5.5.3+ รองรับ Emoji และตัวอักษร 4-byte เต็มรูปแบบ
แนะนำ: ใช้ utf8mb4 แทน utf8
-- ระดับ Database CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- ระดับ Table CREATE TABLE mytable (name VARCHAR(100)) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- ระดับ Column ALTER TABLE mytable MODIFY name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ตรวจสอบ Collation ปัจจุบัน
SHOW VARIABLES LIKE 'collation%'; SHOW TABLE STATUS WHERE Name = 'DemoTable2000'; SHOW FULL COLUMNS FROM DemoTable2000;
สรุป
ปัญหา Single Quote หายไปมักมาจาก Character Set/Collation ไม่ตรงกัน ระหว่าง Client, Connection, Table, Column ควรตั้งค่าให้เป็น utf8mb4_unicode_ci ทุกชั้นตั้งแต่ตอนสร้าง Database