บทนำ
การรู้ Charset และ Collation ของฐานข้อมูล/ตาราง สำคัญสำหรับการจัดการภาษา, การเรียงลำดับ, และการเก็บข้อมูล Unicode (Emoji, ภาษาไทย, ฯลฯ)
ตรวจสอบ Charset ของฐานข้อมูล
mysql> SHOW CREATE DATABASE web;
ผลลัพธ์
+----------+-----------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+-----------------------------------------------------------------------------------------+
| web | CREATE DATABASE `web` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */ |
+----------+-----------------------------------------------------------------------------------------+
1 row in set (0.03 sec)
ฐานข้อมูล web ใช้ utf8 กับ utf8_unicode_ci
ตรวจสอบ Charset ของตาราง
mysql> SHOW CREATE TABLE web.DemoTable;
ผลลัพธ์
+--------------+----------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+--------------+----------------------------------------------------------------------------------------------------------------------------------+
| DemoTable | CREATE TABLE `DemoTable` (`Value` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
+--------------+----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
คำสั่งสรุป Charset ทุกตารางในฐานข้อมูล
SELECT TABLE_NAME, TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'yourDatabaseName';
Charset และ Collation ยอดนิยม
| Charset | Collation | คำอธิบาย |
|---|---|---|
| utf8mb4 | utf8mb4_unicode_ci | รองรับ Unicode เต็มรูปแบบ (Emoji, ภาษาทุกภาษา) แนะนำ |
| utf8 | utf8_unicode_ci | รองรับ Unicode บางส่วน (ไม่รองรับ Emoji 4 bytes) |
| latin1 | latin1_swedish_ci | Default เก่า ไม่รองรับภาษาไทย/Unicode |
เปลี่ยน Charset ของตาราง
ALTER TABLE DemoTable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
เปลี่ยน Charset ของฐานข้อมูล
ALTER DATABASE web CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;