首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Debian 系統 MySQL 中文亂碼終極解決方案:my.cnf 版本差異配置模板

     編輯:MySQL 資料庫相關知識

Debian/Ubuntu 系統下 MySQL 中文亂碼高發,核心原因是 5.5 版本前後配置參數名稱變更(default-character-set → character-set-server)。本文提供按版本區分的精確配置模板,經 Debian 7.0 / MySQL 5.5+ 實測驗證。

一、問題現象

mysql> STATUS;
Server characterset: latin1
Db     characterset: latin1
Client characterset: latin1
Conn.  characterset: latin1

默認全鏈路 latin1,寫入中文報錯或存為亂碼。

二、按版本精確配置

MySQL 5.5 之前(舊參數名)

# /etc/mysql/my.cnf
[client]
default-character-set = utf8

[mysqld]
default-character-set = utf8
# 若啟動報錯,改為:
# character_set_server = utf8

MySQL 5.5 及以後(新參數名,含 Debian 7/8/9/10/11、Ubuntu 12.04+)

# /etc/mysql/my.cnf
[client]
default-character-set = utf8mb4

[mysqld]
default-storage-engine = InnoDB
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci  # 8.0 可用 utf8mb4_0900_ai_ci

⚠️ **關鍵差異**:[mysqld] 區段**不再支持** default-character-set,必須用 character-set-server + collation-server。

三、生效驗證流程

  1. systemctl restart mysql(或 service mysql restart)
  2. mysql -uroot -p -e "SHOW VARIABLES LIKE 'character_set_%';"
  3. 確認 character_set_server、character_set_database、character_set_client、character_set_connection、character_set_results 均為 utf8mb4
  4. 實測寫入:INSERT INTO t(c) VALUES ('測試😀'); SELECT HEX(c) FROM t; 應見 F0 9F 98 80

四、常見誤區避坑

誤區後果正確做法
在 5.5+ 用 default-character-set=utf8啟動報錯 unknown variable 或配置不生效改用 character-set-server
只改 [client] 不改 [mysqld]服務端仍用 latin1,存入數據仍亂碼雙區段同步設置
用 utf8 而非 utf8mb4無法存 Emoji/生僻字(utf8 實為 utf8mb3)全鏈路 utf8mb4
修改配置後未重啟不生效必須重啟 mysqld

五、應用層同步配置(以 PHP 為例)

$pdo = new PDO("mysql:host=127.0.0.1;dbname=test;charset=utf8mb4", $user, $pass);
// 或 mysqli
$mysqli->set_charset('utf8mb4');

掌握版本參數差異,按模板修改 my.cnf 並重啟,Debian 系統 MySQL 中文亂碼可一次性徹底解決。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved