首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

徹底解決 MySQL 中文亂碼:Windows/Linux 環境下字符集配置全攻略

     編輯:MySQL 綜合教學

徹底解決 MySQL 中文亂碼:Windows/Linux 環境下字符集配置全攻略

MySQL 中文亂碼核心成因只有三類:服務端默認字符集非 UTF-8、表/庫字符集定義不一致、客戶端連接字符集未正確設置。本文提供 Windows 解壓版、Linux 包管理安裝、應用層連接三個維度的完整配置方案,強烈建議全鏈路統一使用 utf8mb4(支援完整 Unicode 包含 Emoji)。

Windows 解壓版(ZIP 包)配置

  1. 複製 my-default.ini 為 my.ini
  2. 編輯 my.ini,在 [mysqld] 區塊添加:
    character_set_server = utf8mb4
    collation_server = utf8mb4_general_ci
  3. 在文件末尾添加客戶端配置:
    [client]
    port = 3306
    default-character-set = utf8mb4
    
    [mysql]
    default-character-set = utf8mb4
  4. 重啟服務驗證:SHOW VARIABLES LIKE 'char%'; 所有相關變量應顯示 utf8mb4

Linux 環境配置(MySQL 5.5+ / 5.6+ / 5.7+)

編輯 /etc/my.cnf 或 /etc/mysql/my.cnf:

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'
# skip-character-set-client-handshake  # 可選:強制忽略客戶端字符集請求

重啟服務:systemctl restart mysqld 或 /etc/init.d/mysqld restart

庫/表級字符集顯式指定(避免遺留問題)

-- 創建數據庫
CREATE DATABASE `my_db` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- 創建表
CREATE TABLE `users` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- 修改現有庫/表
ALTER DATABASE `old_db` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `old_table` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

連接層字符集設置(應用代碼中)

  • JDBC:jdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=utf8mb4&zeroDateTimeBehavior=convertToNull
  • PHP PDO:$pdo->exec("SET NAMES utf8mb4"); 或 DSN 中指定 charset=utf8mb4
  • Python PyMySQL:charset='utf8mb4' 參數
  • 通用:連接建立後立即執行 SET NAMES utf8mb4

數據導入導出字符集匹配原則

數據文件編碼會話設置目標庫/表編碼
UTF-8SET NAMES utf8mb4utf8mb4
GBK/GB2312SET NAMES gbkgbk

⚠️ 嚴禁跨編碼導入:UTF-8 文件不能用 GBK 會話導入,反之亦然。Windows 下 iconv -f GBK -t UTF-8 file.csv -o file_utf8.csv 可轉換編碼。

Web 前端配置

  • HTML:<meta charset="utf-8">
  • HTTP 響應頭:Content-Type: text/html; charset=utf-8
  • 若歷史項目必須用 GBK,請確保數據庫、連接、頁面三端統一為 GBK

快速診斷命令

-- 查看實例級字符集
SHOW VARIABLES LIKE 'character_set_%';
SHOW VARIABLES LIKE 'collation_%';

-- 查看庫/表定義
SHOW CREATE DATABASE db_name;
SHOW CREATE TABLE table_name;

-- 查看當前會話字符集
SHOW VARIABLES LIKE 'character_set_connection';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved