Ubuntu apt-get install mysql-server 安裝的 MySQL 5.6.25 採用分離式配置佈局,預設字符集為 latin1,導致中文亂碼、Emoji 無法存儲。本文針對 apt 安裝版,給出精確的雙配置文件修改路徑、參數名稱(連字符版)、重啟驗證全流程。
# 客戶端配置 (mysql 命令行、mysqldump 等)
/etc/mysql/conf.d/mysql.cnf
# 服務端配置 (mysqld 進程)
/etc/mysql/mysql.conf.d/mysqld.cnf
/etc/mysql/conf.d/mysql.cnf[mysql]
# 原文件通常只有 [mysql] 區塊標題,無具體參數
no-auto-rehash
default-character-set = utf8mb4
/etc/mysql/mysql.conf.d/mysqld.cnf[mysqld]
# 基礎連接參數(通常已存在,保持不變)
socket = /var/run/mysqld/mysqld.sock
port = 3306
# 核心字符集參數(注意:MySQL 5.6+ 必須用連字符名)
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
關鍵提醒: 舊版教程常寫 character_set_server (下劃線),MySQL 5.6+ 僅識別 character-set-server (連字符),寫錯將不生效。
sudo /etc/init.d/mysql restart
# 或 systemd
sudo systemctl restart mysql
mysql> SHOW VARIABLES LIKE '%char%';
+--------------------------+----------------------------+
| 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 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
驗證標準: 除 character_set_system (固定 utf8) 與 character_set_filesystem (固定 binary) 外,其餘 6 個變量必須全為 utf8mb4。
修改配置僅影響新建庫表。現有庫表保持原字符集 (latin1/utf8),需顯式遷移:
-- 庫級遷移
ALTER DATABASE `your_db` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
-- 表級遷移 (會重建表,鎖表,大表謹慎)
ALTER TABLE `your_db`.`your_table` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 批量生成遷移腳本
SELECT CONCAT('ALTER TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_db' AND TABLE_TYPE = 'BASE TABLE';
大表零停機遷移工具: pt-online-schema-change (Percona Toolkit) 或 gh-ost (GitHub)。
jdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=utf8mb4&zeroDateTimeBehavior=convertToNull
# useUnicode=true 可省略,characterEncoding 指定即可自動啟用 Unicode 模式
Ubuntu apt 版 MySQL 5.6 中文配置核心三步:1) 定位雙配置文件 → 2) 客戶端/服務端雙端設 utf8mb4 (參數名用連字符) → 3) 重啟驗證 6 大 character_set 變量。補上存量表遷移與 JDBC 參數同步,即可徹底解決中文亂碼、Emoji 存儲失敗、生僻字截斷等全字符集痛點。