ข้อผิดพลาด ERROR 1115 (42000): Unknown character set: 'utf8mb4' เกิดขึ้นเมื่อ **MySQL Version ต่ำกว่า 5.5.3** เพราะ utf8mb4 ถูกเพิ่มเข้ามาตั้งแต่เวอร์ชัน 5.5.3
สาเหตุและวิธีแก้
1. ตรวจสอบเวอร์ชัน MySQL
mysql> SELECT VERSION();
+-----------+
| version() |
+-----------+
| 8.0.12 |
+-----------+
1 row in set (0.00 sec)
หากเวอร์ชันต่ำกว่า 5.5.3 **ต้องอัปเกรด MySQL** ไม่มีทางแก้อื่น
2. หากเวอร์ชันพอแต่ยัง Error
- ตรวจสอบว่า
character_set_serverและcollation_serverตั้งค่าถูกต้อง - ตรวจสอบ
my.cnf/my.iniว่ามีการตั้งค่า charset ผิดหรือไม่ - Restart MySQL Service หลังแก้ไฟล์ Config
ดู Character Set ที่รองรับ
mysql> SHOW CHARACTER SET;
+----------+---------------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+---------------------------------+---------------------+--------+
| utf8mb4 | UTF-8 Unicode | utf8mb4_0900_ai_ci | 4 |
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| ... | ... | ... | ... |
+----------+---------------------------------+---------------------+--------+
41 rows in set (0.01 sec)
utf8 vs utf8mb4
| คุณสมบัติ | utf8 (alias utf8mb3) | utf8mb4 |
|---|---|---|
| รองรับ Unicode | BMP เท่านั้น (U+0000 - U+FFFF) | ทั้งหมด รวม Emoji (U+10000+) |
| Byte ต่อตัวอักษรสูงสุด | 3 | 4 |
| Emoji 😀🎉 | ❌ เกิด Error / แสดงผิด | ✅ ทำงานได้ |
| Index Key Length Limit | 767 bytes (255 chars) | 767 bytes (191 chars) |
| แนะนำสำหรับ | Legacy systems only | 🌟 โปรเจกต์ใหม่ทุกโปรเจกต์ |
การตั้งค่าแนะนำใน my.cnf / my.ini
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
สร้างตาราง/ฐานข้อมูลใหม่ด้วย utf8mb4
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE mytable (
id INT PRIMARY KEY,
name VARCHAR(100)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
แปลงตารางเก่าเป็น utf8mb4
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
คำเตือน: การ CONVERT ตารางใหญ่ใช้เวลานานและ Lock ตาราง ควรทำในช่วง Maintenance Window