Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL: แก้ปัญหา Single Quote (') ไม่แสดงผลหลัง INSERT ด้วย COLLATE utf8_unicode_ci

ปัญหา

เมื่อ 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-Insensitive
  • utf8_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