- 1 1. บทนำ
- 2 2. ชุดอักขระของ MySQL คืออะไร? ทำความเข้าใจพื้นฐาน
- 3 3. วิธีตรวจสอบชุดอักขระปัจจุบัน
- 4 4. วิธีการเปลี่ยนชุดอักขระของ MySQL
- 5 5. การแก้ไขปัญหาหลังการเปลี่ยนชุดอักขระ
- 6 6. How Character Set Changes Affect Performance
- 7 7. Recommended Settings (Best Practices)
- 8 8. คำถามที่พบบ่อย
- 8.1 ความแตกต่างระหว่าง utf8 และ utf8mb4?
- 8.2 การเปลี่ยนชุดอักขระของ MySQL จะทำให้ข้อมูลสูญหายหรือไม่?
- 8.3 ฉันจะแก้ไข mojibake หากเกิดขึ้นอย่างไร?
- 8.4 ความเสี่ยงเมื่อแปลงจาก latin1 ไปเป็น utf8mb4 คืออะไร?
- 8.5 การเปลี่ยนไปใช้ utf8mb4 มีผลต่อประสิทธิภาพหรือไม่?
- 8.6 ควรใช้แบบไหน: utf8mb4_general_ci หรือ utf8mb4_unicode_ci?
- 8.7 คำสั่ง SQL จะช้าลงหลังจากเปลี่ยนเป็น utf8mb4 หรือไม่?
- 8.8 สรุป
- 8.9 บันทึกสุดท้าย
1. บทนำ
ทำไมคุณอาจต้องเปลี่ยนชุดอักขระของ MySQL
ชุดอักขระของฐานข้อมูลเป็นการตั้งค่าที่สำคัญซึ่งกำหนดวิธีการเข้ารหัสและประมวลผลข้อมูลข้อความเพื่อการจัดเก็บ ใน MySQL ชุดอักขระเริ่มต้นมักเป็น latin1 ซึ่งอาจทำให้เกิดปัญหาเมื่อทำงานกับภาษาญี่ปุ่นหรืออักขระพิเศษอื่น ๆ โดยเฉพาะอย่างยิ่งในระหว่างการย้ายข้อมูลหรือการทำมาตรฐานระบบ การสลับไปใช้ชุดอักขระที่เหมาะสมจึงกลายเป็นสิ่งจำเป็น
ปัญหาทั่วไปและสาเหตุของมัน
ปัญหาที่พบบ่อยเกี่ยวกับชุดอักขระของ MySQL มีดังต่อไปนี้
- Mojibake (อักขระเสีย)
utf8และlatin1ถูกผสมกันในสภาพแวดล้อมเดียว- การตั้งค่าชุดอักขระของไคลเอนต์และเซิร์ฟเวอร์ไม่ตรงกัน
- ปัญหาในการค้นหา
- เนื่องจากความแตกต่างของ collation ผลลัพธ์การค้นหาที่คาดหวังไม่แสดง
- ลำดับการเรียงลำดับต่างจากที่คุณคาดไว้
- ปัญหาระหว่างการย้ายข้อมูล
- Emoji และสัญลักษณ์พิเศษไม่สามารถบันทึกได้เพราะไม่ได้ใช้
utf8mb4 - การแปลงชุดอักขระไม่ได้รับการจัดการอย่างถูกต้องระหว่างการส่งออก/นำเข้า
เป้าหมายและโครงสร้างของบทความ
บทความนี้ให้คำอธิบายอย่างครบถ้วนเกี่ยวกับการเปลี่ยนชุดอักขระของ MySQL ตั้งแต่ แนวคิดพื้นฐาน ไปจนถึง วิธีการเปลี่ยนการตั้งค่า และ การแก้ไขปัญหา
โครงร่าง
- ความรู้พื้นฐานเกี่ยวกับชุดอักขระของ MySQL
- วิธีตรวจสอบชุดอักขระปัจจุบัน
- วิธีเปลี่ยนชุดอักขระของ MySQL
- การแก้ไขปัญหาหลังการเปลี่ยนแปลง
- ผลกระทบของการเปลี่ยนชุดอักขระต่อประสิทธิภาพ
- การตั้งค่าที่แนะนำ (แนวปฏิบัติที่ดีที่สุด)
- คำถามที่พบบ่อย (FAQ)
โดยการอ่านคู่มือนี้ คุณจะเข้าใจชุดอักขระของ MySQL อย่างลึกซึ้งและสามารถ เลือกการตั้งค่าที่เหมาะสมและหลีกเลี่ยงปัญหาทั่วไป ได้
2. ชุดอักขระของ MySQL คืออะไร? ทำความเข้าใจพื้นฐาน
ชุดอักขระคืออะไร?
ชุดอักขระ (Character Set) คือชุดกฎที่ใช้ในการจัดเก็บและประมวลผลอักขระเป็นข้อมูลดิจิทัล ตัวอย่างเช่น เมื่อเก็บอักขระญี่ปุ่น “あ” UTF-8 จะแทนด้วยลำดับไบต์ E3 81 82 ในขณะที่ Shift_JIS ใช้ 82 A0
ใน MySQL คุณสามารถกำหนดชุดอักขระต่าง ๆ ได้ระดับฐานข้อมูลหรือระดับตาราง การเลือกชุดอักขระที่เหมาะสมจะช่วย ป้องกัน mojibake และทำให้การทำหลายภาษาเป็นไปอย่างราบรื่น
ชุดอักขระที่พบบ่อย
| Character Set | Characteristics | Use Case |
|---|---|---|
utf8 | UTF-8 up to 3 bytes | Does not support some special characters (such as emoji) |
utf8mb4 | UTF-8 up to 4 bytes | Supports emoji and special characters (recommended) |
latin1 | ASCII-compatible | Used in older systems |
Collation คืออะไร?
Collation คือชุดกฎที่ใช้เปรียบเทียบและเรียงลำดับข้อมูลภายในชุดอักขระ ตัวอย่างเช่น มันกำหนดว่า “A” และ “a” จะถือว่าเป็นอักขระเดียวกันหรือไม่ และกำหนดวิธีการจัดลำดับ
Collation ที่ใช้บ่อย
| Collation | Description |
|---|---|
utf8_general_ci | Case-insensitive, suitable for general use |
utf8_unicode_ci | Unicode-based collation (recommended) |
utf8mb4_bin | Binary comparison (use when exact matches are required) |
ความแตกต่างระหว่าง utf8 และ utf8mb4
utf8 ของ MySQL จริง ๆ แล้วสามารถเก็บได้สูงสุด 3 ไบต์ ต่ออักขระ ดังนั้นจึงไม่สามารถจัดการกับอักขระพิเศษบางประเภท (เช่น emoji หรืออักขระ CJK ที่ขยาย) ได้ ในทางตรงกันข้าม utf8mb4 รองรับได้สูงสุด 4 ไบต์ ต่ออักขระ จึงเป็นเหตุผลที่แอปพลิเคชันสมัยใหม่แนะนำให้ใช้ utf8mb4
| Character Set | Max Bytes | Emoji Support | Recommendation |
|---|---|---|---|
utf8 | 3 bytes | ❌ Not supported | ❌ Not recommended |
utf8mb4 | 4 bytes | ✅ Supported | ✅ Recommended |
ทำไมคุณควรเปลี่ยนจาก utf8 ไปเป็น utf8mb4
- ความเข้ากันได้ในอนาคต : ระบบสมัยใหม่กำลังมาตรฐานไปที่
utf8mb4มากขึ้น - การเก็บอักขระพิเศษและ emoji : ด้วย
utf8mb4คุณสามารถจัดการข้อมูลในโพสต์ SNS และแอปแชทได้อย่างปลอดภัย - การทำหลายภาษา : สำหรับระบบหลายภาษา จะลดความเสี่ยงของ mojibake ลงได้อย่างมาก
สรุป
- ชุดอักขระ กำหนดวิธีการจัดเก็บและประมวลผลข้อมูล
- Collation กำหนดวิธีการเปรียบเทียบอักขระ
utf8ของ MySQL จำกัดที่ 3 ไบต์ จึงแนะนำให้ใช้utf8mb4utf8mb4_unicode_ciเป็น collation ที่แนะนำบ่อยสำหรับการใช้งานทั่วไป
3. วิธีตรวจสอบชุดอักขระปัจจุบัน
ก่อนที่จะเปลี่ยนชุดอักขระของ MySQL จำเป็นต้อง ตรวจสอบการตั้งค่าปัจจุบัน
เนื่องจากชุดอักขระสามารถตั้งค่าได้หลายระดับ (ฐานข้อมูล, ตาราง, คอลัมน์) คุณจึงต้องเข้าใจว่าต้องเปลี่ยนแปลงที่ใดบ้าง
วิธีตรวจสอบชุดอักขระปัจจุบัน
ตรวจสอบชุดอักขระระดับเซิร์ฟเวอร์ของ MySQL
First, check the default character set and collation settings for the entire MySQL server.
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
ผลลัพธ์ตัวอย่าง:
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
+--------------------------+----------------------------+
ตรวจสอบชุดอักขระต่อฐานข้อมูล
เพื่อดูชุดอักขระของฐานข้อมูลเฉพาะ ให้ใช้คิวรีต่อไปนี้
SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = 'database_name';
ผลลัพธ์ตัวอย่าง
+----------------+----------------------+----------------------+
| SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+----------------+----------------------+----------------------+
| my_database | utf8mb4 | utf8mb4_unicode_ci |
+----------------+----------------------+----------------------+
ตรวจสอบชุดอักขระของตาราง
นี่คือวิธีตรวจสอบชุดอักขระของตารางเฉพาะ
SHOW CREATE TABLE table_name;
ผลลัพธ์ตัวอย่าง
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
Checkpoints
DEFAULT CHARSET=latin1→ ไม่ใช่utf8mb4, ดังนั้นต้องเปลี่ยนCOLLATE=latin1_swedish_ci→ การเปลี่ยนเป็นutf8mb4_unicode_ciมักจะเหมาะสมกว่า
ตรวจสอบชุดอักขระของคอลัมน์
เพื่อดูชุดอักขระในระดับคอลัมน์ ให้รัน SQL ต่อไปนี้
SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'database_name'
AND TABLE_NAME = 'table_name';
ผลลัพธ์ตัวอย่าง
+-------------+--------------------+----------------------+
| COLUMN_NAME | CHARACTER_SET_NAME | COLLATION_NAME |
+-------------+--------------------+----------------------+
| name | latin1 | latin1_swedish_ci |
| email | utf8mb4 | utf8mb4_unicode_ci |
+-------------+--------------------+----------------------+
ในตัวอย่างนี้ คอลัมน์ name ใช้ latin1 จึงแนะนำให้เปลี่ยนเป็น utf8mb4
สรุป
- ชุดอักขระของ MySQL ถูกกำหนดค่าที่หลายระดับ (เซิร์ฟเวอร์, ฐานข้อมูล, ตาราง, คอลัมน์).
- โดยการตรวจสอบชุดอักขระในแต่ละระดับ, คุณสามารถนำการเปลี่ยนแปลงที่เหมาะสมได้.
- ใช้คำสั่งเช่น
SHOW VARIABLESและSHOW CREATE TABLEเพื่อทำความเข้าใจการกำหนดค่าปัจจุบันอย่างเต็มที่.

4. วิธีการเปลี่ยนชุดอักขระของ MySQL
โดยการเปลี่ยนชุดอักขระของ MySQL อย่างเหมาะสม คุณสามารถป้องกันปัญหา mojibake และสนับสนุนข้อมูลหลายภาษาได้อย่างราบรื่น ในส่วนนี้ เราจะอธิบายวิธีอัปเดตการตั้งค่าที่แต่ละระดับ: ทั่วทั้งเซิร์ฟเวอร์, ฐานข้อมูล, ตาราง, และคอลัมน์
เปลี่ยนชุดอักขระเริ่มต้นทั่วทั้งเซิร์ฟเวอร์
เพื่อเปลี่ยนชุดอักขระเริ่มต้นทั่วทั้งเซิร์ฟเวอร์ คุณต้องแก้ไขไฟล์กำหนดค่า MySQL (my.cnf หรือ my.ini)
ขั้นตอน
- เปิดไฟล์กำหนดค่า
- บน Linux:
bash sudo nano /etc/mysql/my.cnf บน Windows: wp:list /wp:list
- เปิด
C:\ProgramData\MySQL\MySQL Server X.X\my.ini
- เปิด
- เพิ่มหรือเปลี่ยนการตั้งค่าชุดอักขระ เพิ่มหรืออัปเดตบรรทัดต่อไปนี้ภายใต้ส่วน
mysqld[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci
- รีสตาร์ท MySQL
sudo systemctl restart mysql
บน Windows:
net stop MySQL && net start MySQL
- ตรวจสอบการเปลี่ยนแปลง
SHOW VARIABLES LIKE 'character_set_server';
เปลี่ยนชุดอักขระระดับฐานข้อมูล
ALTER DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ตรวจสอบการเปลี่ยนแปลง
SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = 'mydatabase';
เปลี่ยนชุดอักขระระดับตาราง
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ตรวจสอบการเปลี่ยนแปลง
SHOW CREATE TABLE users;
เปลี่ยนชุดอักขระระดับคอลัมน์
ALTER TABLE users MODIFY COLUMN name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ตรวจสอบการเปลี่ยนแปลง
SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'mydatabase'
AND TABLE_NAME = 'users';
การตรวจสอบหลังการเปลี่ยนแปลงและความสำคัญของการสำรองข้อมูล
เพื่อรักษาความสมบูรณ์ของข้อมูลหลังจากเปลี่ยนชุดอักขระ ให้ทำตามขั้นตอนต่อไปนี้.
สำรองข้อมูลของคุณ
mysqldump -u root -p --default-character-set=utf8mb4 mydatabase > backup.sql
ตรวจสอบการตั้งค่าอีกครั้ง
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
SHOW CREATE TABLE users;
แทรกและแสดงข้อมูลทดสอบ
INSERT INTO users (name, email) VALUES ('Test User', 'test@example.com');
SELECT * FROM users;
สรุป
- การเปลี่ยนชุดอักขระทั่วเซิร์ฟเวอร์ : แก้ไข
my.cnfและตั้งค่าcharacter-set-server=utf8mb4 - การเปลี่ยนชุดอักขระของฐานข้อมูล :
ALTER DATABASE mydatabase CHARACTER SET utf8mb4 - การเปลี่ยนชุดอักขระของตาราง :
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 - การเปลี่ยนชุดอักขระของคอลัมน์ :
ALTER TABLE users MODIFY COLUMN name VARCHAR(255) CHARACTER SET utf8mb4 - หลังจากการเปลี่ยนแปลง ควรตรวจสอบการตั้งค่าและทดสอบข้อมูลของคุณเสมอ
5. การแก้ไขปัญหาหลังการเปลี่ยนชุดอักขระ
หลังจากเปลี่ยนชุดอักขระของ MySQL คุณอาจพบกรณีที่ระบบทำงานไม่ถูกต้องหรือข้อมูลที่จัดเก็บกลายเป็นอักขระผสม (garbled).
ในส่วนนี้ เราจะอธิบาย ปัญหาทั่วไปและวิธีแก้ไข อย่างละเอียด.
สาเหตุของ Mojibake และวิธีแก้ไข
หากเกิด mojibake หลังจากเปลี่ยนชุดอักขระ สาเหตุต่อไปนี้เป็นสาเหตุที่พบบ่อย.
| Cause | How to Check | Solution |
|---|---|---|
| The client character set setting differs | SHOW VARIABLES LIKE 'character_set_client'; | Run SET NAMES utf8mb4; |
| Existing data was stored using a different encoding | SELECT HEX(column_name) FROM table_name; | Use CONVERT() or re-export the data |
| The connection encoding is not correct | Connect with mysql --default-character-set=utf8mb4 | Adjust the client-side character set configuration |
| Application settings (PHP/Python, etc.) are incorrect | mysqli_set_charset($conn, 'utf8mb4'); | Standardize the application’s character set settings |
วิธีแก้ #1: ตั้งค่าชุดอักขระของไคลเอนต์ให้ถูกต้อง
SET NAMES utf8mb4;
วิธีแก้ #2: แปลงข้อมูลที่มีอยู่ให้ถูกต้อง
UPDATE users SET name = CONVERT(CAST(CONVERT(name USING latin1) AS BINARY) USING utf8mb4);
หมายเหตุเมื่อแปลงจาก latin1 ไปเป็น utf8mb4
ขั้นตอนที่ปลอดภัย
- สำรองข้อมูลปัจจุบัน
mysqldump -u root -p --default-character-set=latin1 mydatabase > backup.sql
- เปลี่ยนชุดอักขระของฐานข้อมูล
ALTER DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- เปลี่ยนชุดอักขระของตาราง
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- นำเข้าข้อมูลใหม่
mysql -u root -p --default-character-set=utf8mb4 mydatabase < backup.sql
ข้อมูลไม่สามารถค้นหาได้หลังการเปลี่ยนแปลง
กรณี #1: การค้นหาแบบ LIKE ไม่ทำงาน
SELECT * FROM users WHERE name COLLATE utf8mb4_unicode_ci LIKE '%Tanaka%';
กรณี #2: ลำดับการเรียงเปลี่ยนไป
SELECT * FROM users ORDER BY BINARY name;
มาตรการด้านแอปพลิเคชัน
สำหรับ PHP
mysqli_set_charset($conn, 'utf8mb4');
สำหรับ Python (MySQL Connector)
import mysql.connector
conn = mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="mydatabase",
charset="utf8mb4"
)
For Node.js (MySQL2)
const mysql = require('mysql2');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'mydatabase',
charset: 'utf8mb4'
});
Summary
- Post-change issues generally fall into three categories: client settings, data conversion, and application settings.
- To prevent mojibake, standardize the client character set using
SET NAMES utf8mb4. - Watch for LIKE search and sort order changes, and specify
COLLATEwhen needed. - Set
utf8mb4in your application as well to avoid encoding mismatches.
6. How Character Set Changes Affect Performance
When changing the MySQL character set to utf8mb4, there are several performance considerations, such as increased storage usage and index limitations.
In this section, we explain the impact and the best countermeasures.
Increased Storage Usage
Compared to MySQL’s utf8, utf8mb4 can use up to 4 bytes per character,
so the overall table size may increase.
Max bytes per character by character set
| Character Set | Max Bytes per Character |
|---|---|
latin1 | 1 byte |
utf8 | 3 bytes |
utf8mb4 | 4 bytes |
For example, with utf8, VARCHAR(255) is up to 765 bytes (255×3),
but with utf8mb4, it becomes up to 1020 bytes (255×4).
Countermeasure
ALTER TABLE posts MODIFY COLUMN title VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Increased Index Size
MySQL enforces a maximum index key length.
After switching to utf8mb4, index entries become larger, and you may hit the limit—making indexes unusable.
Check index impact
SHOW INDEX FROM users;
Example error
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
Countermeasure
ALTER TABLE users MODIFY COLUMN email VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Impact on Query Performance
Changing the character set to utf8mb4 may affect query execution speed.
Operations that may be affected
LIKEsearches over large datasetsORDER BYprocessing- JOIN query performance
Countermeasure
CREATE INDEX idx_name ON users(name(100));
Memory Usage and Buffer Tuning
With utf8mb4, memory usage may increase.
Recommended settings
[mysqld]
innodb_buffer_pool_size = 1G
query_cache_size = 128M
Summary
- Switching to
utf8mb4increases storage usage. - Index sizes increase and may exceed limits.
- Query performance can be affected.
- Because memory usage may increase, buffer sizes may need tuning.
7. Recommended Settings (Best Practices)
By setting MySQL character sets appropriately, you can maintain data integrity while optimizing performance.
In this section, we present recommended MySQL character set configurations and explain key points for an optimal setup.
Recommended MySQL Character Set Configuration
| Item | Recommended Setting | Reason |
|---|---|---|
| Character Set | utf8mb4 | Supports all Unicode characters including emoji and special characters |
| Collation | utf8mb4_unicode_ci | Case-insensitive and suitable for multilingual systems |
| Storage Engine | InnoDB | Good balance of performance and consistency |
| Indexed string length | VARCHAR(191) | Avoids exceeding MySQL index limits |
Recommended my.cnf Settings
1. MySQL Server Character Set Settings
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
skip-character-set-client-handshake
innodb_large_prefix = ON
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_buffer_pool_size = 1G
query_cache_size = 128M
2. Client-Side Character Set Settings
[client]
default-character-set = utf8mb4
Recommended Database Settings
CREATE DATABASE mydatabase DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
To change an existing database character set:
ALTER DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Recommended Table Settings
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
email VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
เปลี่ยนชุดอักขระสำหรับตารางที่มีอยู่
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ความแตกต่างระหว่าง utf8mb4_general_ci และ utf8mb4_unicode_ci
| Collation | Characteristics | Use Case |
|---|---|---|
utf8mb4_general_ci | Faster comparisons, but less accurate | Performance-focused systems |
utf8mb4_unicode_ci | Unicode-standard, more accurate comparisons | General-purpose use (recommended) |
✅ หากคุณต้องการการสนับสนุนหลายภาษา หรือการจัดเรียงที่แม่นยำ ให้เลือก utf8mb4_unicode_ci.
การเพิ่มประสิทธิภาพดัชนี
CREATE FULLTEXT INDEX idx_fulltext ON articles(content);
สรุป
- แนะนำให้ใช้การผสมผสานของ
utf8mb4+utf8mb4_unicode_ci. - ทำให้การตั้งค่าเซิร์ฟเวอร์ (
my.cnf) และชุดอักขระการเชื่อมต่อเป็นมาตรฐาน. - ระบุ
utf8mb4อย่างชัดเจนที่ระดับฐานข้อมูล ตาราง และคอลัมน์. - ใช้
VARCHAR(191)เพื่อหลีกเลี่ยงข้อจำกัดความยาวคีย์ของดัชนี. - ใช้
utf8mb4_unicode_ciสำหรับการเปรียบเทียบที่แม่นยำ.
8. คำถามที่พบบ่อย
นี่คือคำถามทั่วไปในโลกจริงเกี่ยวกับการเปลี่ยนชุดอักขระของ MySQL.
เรายังครอบคลุม วิธีจัดการข้อผิดพลาด และ วิธีเลือกการตั้งค่าที่ดีที่สุด.
ความแตกต่างระหว่าง utf8 และ utf8mb4?
SHOW VARIABLES LIKE 'character_set_server';
การเปลี่ยนชุดอักขระของ MySQL จะทำให้ข้อมูลสูญหายหรือไม่?
mysqldump -u root -p --default-character-set=utf8mb4 mydatabase > backup.sql
ฉันจะแก้ไข mojibake หากเกิดขึ้นอย่างไร?
UPDATE users SET name = CONVERT(CAST(CONVERT(name USING latin1) AS BINARY) USING utf8mb4);
ความเสี่ยงเมื่อแปลงจาก latin1 ไปเป็น utf8mb4 คืออะไร?
ALTER DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
การเปลี่ยนไปใช้ utf8mb4 มีผลต่อประสิทธิภาพหรือไม่?
ALTER TABLE users MODIFY COLUMN email VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ควรใช้แบบไหน: utf8mb4_general_ci หรือ utf8mb4_unicode_ci?
| Collation | Characteristics | Use Case |
|---|---|---|
utf8mb4_general_ci | Faster comparisons, but less accurate | Performance-focused systems |
utf8mb4_unicode_ci | Unicode-standard, accurate comparisons | General-purpose use (recommended) |
คำสั่ง SQL จะช้าลงหลังจากเปลี่ยนเป็น utf8mb4 หรือไม่?
CREATE FULLTEXT INDEX idx_fulltext ON articles(content);
สรุป
✅ แนะนำให้ใช้ utf8mb4. ไม่แนะนำให้ใช้ utf8 เนื่องจากข้อจำกัดของมัน.
✅ ก่อนทำการเปลี่ยนแปลงใด ๆ ควรตรวจสอบการตั้งค่าด้วย SHOW VARIABLES เสมอ.
✅ ใช้กระบวนการส่งออก/นำเข้าเพื่อป้องกัน mojibake.
✅ พิจารณาข้อจำกัดของดัชนีและใช้ VARCHAR(191) เมื่อเหมาะสม.
✅ สำหรับประสิทธิภาพ ให้เพิ่มดัชนีที่เหมาะสม.
บันทึกสุดท้าย
การเปลี่ยนชุดอักขระของ MySQL ไม่ใช่แค่การปรับแต่งการตั้งค่าอย่างง่าย—มันเป็นงานสำคัญที่อาจส่งผลต่อ ความสมบูรณ์ของข้อมูลและประสิทธิภาพ.
โดยทำตามการตั้งค่าและขั้นตอนที่ถูกต้อง คุณสามารถย้ายไปยัง utf8mb4 ได้อย่างปลอดภัยและมีประสิทธิภาพ.
🔹 ทำตามขั้นตอนในบทความนี้และกำหนดค่าชุดอักขระของคุณให้ถูกต้อง! 🔹


