MySQL 8.0 mặc định dùng utf8mb4 (hỗ trợ đầy đủ Unicode bao gồm emoji). utf8 cũ chỉ hỗ trợ 3 byte (BMP).
Kiểm tra charset hiện tại của bảng
SELECT CCSA.character_set_name
FROM information_schema.TABLES T,
information_schema.COLLATION_CHARACTER_SET_APPLICABILITY CCSA
WHERE CCSA.collation_name = T.table_collation
AND T.table_schema = 'sample'
AND T.table_name = 'mytable';
+--------------------+ | CHARACTER_SET_NAME | +--------------------+ | utf8mb4 | +--------------------+
Chuyển database sang utf8 (alias utf8mb3) - KHÔNG KHUYẾN NGHỊ
mysql> ALTER DATABASE sample CHARACTER SET utf8 COLLATE utf8_general_ci; Query OK, 1 row affected, 1 warning (0.27 sec)
Cảnh báo: utf8 là alias của utf8mb3 (chỉ 3 byte).
Khuyến nghị: Dùng utf8mb4
ALTER DATABASE sample CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Chuyển đổi bảng và cột hiện có
-- Chuyển bảng (mặc định cho cột mới) ALTER TABLE ten_bang CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- Hoặc chỉ đổi default cho bảng (cột cũ giữ nguyên) ALTER TABLE ten_bang CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Lưu ý: CONVERT TO sẽ chuyển đổi dữ liệu hiện có sang charset mới (có thể mất thời gian với bảng lớn). Backup trước khi chạy.