MySQL 修改數據庫、表、欄位字符集完整指南
一、查看當前字符集
SHOW VARIABLES LIKE 'character%';
-- 關鍵項:character_set_server、character_set_database、character_set_client、character_set_connection、character_set_results
二、修改庫級預設字符集(僅影響後續新建表)
ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
三、修改表級字符集(含歷史數據轉換)
-- 僅修改表預設字符集(不轉換現有數據)
ALTER TABLE tbl_name DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
-- **完整轉換**:表預設 + 所有字符欄位 + 現有數據
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
關鍵區別: DEFAULT CHARACTER SET 只改元數據;CONVERT TO 會重建表、轉換所有 CHAR/VARCHAR/TEXT 欄位數據,**必須備份後操作**。
四、修改單欄位字符集
ALTER TABLE tbl_name MODIFY col_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
五、配置文件 my.cnf / my.ini 固化設置
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
skip-character-set-client-handshake # 強制忽略客戶端字符集請求
六、驗證修改結果
SHOW CREATE TABLE tbl_name;
SHOW FULL COLUMNS FROM tbl_name;
SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='db' AND TABLE_NAME='tbl';
七、utf8 vs utf8mb4 選型建議
| 字符集 | 最大字節 | 支援 Emoji | 建議 |
| utf8 (utf8mb3) | 3 字節 | ❌ | 舊系統兼容 |
| utf8mb4 | 4 字節 | ✅ | 新項目首選 |
MySQL 5.5.3+ 完整支援 utf8mb4;InnoDB 行長度限制約 65535 字節,VARCHAR(255) utf8mb4 佔 768 字節,遠未達上限,放心使用。