Cú pháp
Sử dụng ALTER TABLE ... MODIFY với mệnh đề CHARACTER SET:
ALTER TABLE ten_bang MODIFY ten_cot kieu_du_lieu CHARACTER SET ten_charset;
Ví dụ: Đổi cột FirstName từ utf8mb4 sang utf8
1. Tạo bảng (mặc định utf8mb4)
mysql> CREATE TABLE setCharsetDemo ( -> FirstName VARCHAR(60) -> ); Query OK, 0 rows affected (2.09 sec)
2. Kiểm tra charset hiện tại
mysql> SHOW CREATE TABLE setCharsetDemo;
+----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | setCharsetDemo | CREATE TABLE `setcharsetdemo` (`FirstName` varchar(60) COLLATE utf8mb4_unicode_ci DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci | +----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
3. Đổi charset sang utf8
mysql> ALTER TABLE setCharsetDemo -> MODIFY FirstName VARCHAR(60) CHARACTER SET utf8; Query OK, 0 rows affected, 1 warning (2.81 sec) Records: 0 Duplicates: 0 Warnings: 1
4. Kiểm tra lại
mysql> SHOW CREATE TABLE setCharsetDemo;
+----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | setCharsetDemo | CREATE TABLE `setcharsetdemo` (`FirstName` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci | +----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
Charset phổ biến trong MySQL
| Charset | Mô tả | Hỗ trợ Unicode | Kích thước tối đa/ký tự |
|---|---|---|---|
| utf8mb4 | UTF-8 đầy đủ (4 bytes) | ✅ Emoji, chữ Hán, tất cả Unicode | 4 bytes |
| utf8 | UTF-8 cũ (3 bytes) | ❌ Không hỗ trợ emoji, một số chữ hiếm | 3 bytes |
| latin1 | Western European | ❌ Chỉ Latin cơ bản | 1 byte |
| ascii | ASCII cơ bản | ❌ Chỉ 128 ký tự | 1 byte |
Collation đi kèm
utf8mb4_unicode_ci: Chuẩn Unicode, chính xác, chậm hơn một chútutf8mb4_general_ci: Nhanh hơn, ít chính xác hơn cho một số ngôn ngữutf8mb4_0900_ai_ci: Mặc định MySQL 8.0, hỗ trợ Unicode 9.0, accent-insensitive
Đặt charset cho toàn bảng
ALTER TABLE ten_bang CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Lưu ý
- Luôn backup trước khi ALTER TABLE trên bảng lớn
- Thao tác này khóa bảng (metadata lock) - tránh giờ cao điểm
- MySQL 8.0 mặc định utf8mb4 - khuyên dùng cho dự án mới
- Kiểm tra độ dài cột: VARCHAR(255) utf8mb4 = 765 bytes > 767 byte limit (index)