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

แก้ไข ERROR 1115: Unknown character set 'utf8mb4' ใน MySQL

ข้อผิดพลาด 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
รองรับ UnicodeBMP เท่านั้น (U+0000 - U+FFFF)ทั้งหมด รวม Emoji (U+10000+)
Byte ต่อตัวอักษรสูงสุด34
Emoji 😀🎉❌ เกิด Error / แสดงผิด✅ ทำงานได้
Index Key Length Limit767 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