# 1. 尋找預設配置模板
find / -name 'my*.cnf' -type f
# 常見路徑
/usr/share/mysql/my-*.cnf
/etc/my.cnf
# 2. 複製適配模板
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
# 3. 編輯關鍵區段
vi /etc/my.cnf
[client]
default-character-set = utf8
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
init_connect = 'SET NAMES utf8'
systemctl restart mysqld
mysql -u root -p -e "SHOW VARIABLES LIKE 'character_set_%'; SHOW VARIABLES LIKE 'collation_%';"
預期:client/connection/database/results/server = utf8,system = utf8,filesystem = binary,collation_* = utf8_general_ci。
| 場景 | 操作 | 生效範圍 | 是否需重啟 |
|---|---|---|---|
| 全新安裝/全域預設 | 修改 my.cnf [mysqld] 區段 | 新建庫/表/連線 | 是 |
| 現有庫遷移 | ALTER DATABASE db CHARSET=utf8 | 該庫新建表 | 否 |
| 現有表遷移 | ALTER TABLE t CONVERT TO CHARSET utf8 | 該表現有欄位+新欄位 | 否(但鎖表) |
| 僅修改表預設 | ALTER TABLE t CHARSET=utf8 | 該表新增欄位 | 否 |
| 運行時連線 | SET NAMES utf8 / SET character_set_*=utf8 | 當前會話 | 否 |
| db.opt 檔案 | 編輯 /var/lib/mysql/db/db.opt | 該庫預設 | 需重啟 |
SET NAMES utf8; -- 一鍵設定 client/connection/results
-- 或分別精確控制
SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_database = utf8;
SET character_set_results = utf8;
SET character_set_server = utf8; -- 需 SUPER 權限,僅影響後續新連線
SET character_set_system = utf8; -- 唯讀,不可改
SET collation_connection = utf8_general_ci;
SET collation_database = utf8_general_ci;
SET collation_server = utf8_general_ci; -- 需 SUPER
utf8_general_ci 不區分大小寫、utf8_bin 二進位比較)[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
ALTER DATABASE db CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
理由:utf8 = utf8mb3 不支援 Emoji/生僻字;utf8mb4 完整 Unicode 支援,向下相容。