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

MySQL 編碼設置全攻略:Linux/Windows 修改 my.cnf/my.ini 徹底解決中文亂碼

     編輯:MySQL 綜合教學

MySQL 編碼設置全攻略

MySQL 預設字符集 latin1 不支援中文,導致存入漢字變「???」。本文提供 Linux 修改 my.cnf、Windows 修改 my.ini 的標準化流程,統一設置為 utf8mb4 (支援 Emoji) 徹底根治亂碼。

現狀確認

mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
+--------------------------+----------------------------+

Linux 環境 (/etc/my.cnf 或 /etc/mysql/my.cnf)

# 1. 停止服務
systemctl stop mysqld

# 2. 編輯配置文件 (在 [mysqld] 區段下添加)
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

# 3. 重啟服務
systemctl start mysqld

# 4. 驗證
mysql> SHOW VARIABLES LIKE 'character_set_%';
# 應全部顯示 utf8mb4 (除 filesystem=binary, system=utf8)

Windows 環境 (安裝目錄下 my.ini)

  1. 停止服務:net stop MySQL (或服務管理器)。
  2. 編輯 my.ini (記事本/Notepad++ 以 UTF-8 無 BOM 保存),修改/添加:
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4
  1. 重啟服務:net start MySQL。
  2. 驗證同 Linux 步驟 4。

應用層配合 (關鍵)

  • JDBC 連接串: jdbc:mysql://host:3306/db?characterEncoding=utf8&useUnicode=true&serverTimezone=Asia/Shanghai (MySQL 8.0+ 驅動可省略)。
  • PHP PDO: new PDO("mysql:host=...;dbname=...;charset=utf8mb4", ...)。
  • Python PyMySQL: charset='utf8mb4' 參數。
  • JSP 頁面指令: <%@ page contentType="text/html;charset=UTF-8" %> (舊 ISO-8859-1 為亂碼根源)。

避坑指南

現象原因解決
配置生效但存入仍亂碼應用層連接未指定字符集檢查連接串/代碼必帶 charset=utf8mb4
Emoji 存入報錯/變 ?表/欄位仍為 utf8 (僅 3 字節)ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4;
舊數據已亂碼歷史髒數據需按原編碼導出 → 修正 → 重新導入,或用工具修復

一句話總結: **服務端 utf8mb4 + 客戶端連接指定 utf8mb4 + 表欄位 utf8mb4 + 頁面 UTF-8** 四位一體,中文亂碼零發生。

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