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

MySQL 字符編碼完整設定指南:從查看到修改的全方位操作

     編輯:MySQL 綜合教學

MySQL 字符編碼設定全攻略

字符編碼問題是 MySQL 開發與維護中常見的棘手挑戰。亂碼、插入失敗、查詢異常往往源於編碼不一致。本文系統梳理 MySQL 字符編碼的查看方法,並詳細說明從配置文件、庫、表到欄位層級的多種修改路徑,助你徹底解決編碼困擾。

一、快速查看當前編碼狀態

執行以下命令,即可獲取所有與字符集相關的系統變數:

SHOW VARIABLES LIKE 'character_set%';

重點關注 character_set_server(服務端)、character_set_database(當前庫)、character_set_client(客戶端)、character_set_connection(連接層)以及 character_set_results(結果集)這五個核心變數。確保它們均為 utf8 或 utf8mb4,是避免亂碼的基礎。

二、修改配置文件(永久生效,需重啟)

根據作業系統編輯對應配置文件:

  • Windows:my.ini
  • Linux/macOS:/etc/my.cnf 或 /etc/mysql/my.cnf

在 [mysqld]、[mysql]、[client] 等區塊中添加或修改以下參數(推薦使用 utf8mb4 以支援 Emoji 等 4 字節字符):

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

[mysql]
default-character-set=utf8mb4

[client]
default-character-set=utf8mb4

注意:修改後必須重啟 MySQL 服務才能生效(systemctl restart mysqld 或服務管理器重啟)。

三、庫級別編碼操作

1. 建庫時指定

CREATE DATABASE `db_name` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

2. 修改現有庫編碼

ALTER DATABASE `db_name` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

說明:庫級別修改僅影響後續新建的表,不會自動轉換已存在表的編碼。

四、表級別編碼操作

1. 建表時指定

CREATE TABLE `tbl_name` (
  `id` INT PRIMARY KEY
) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

2. 修改表預設編碼

ALTER TABLE `tbl_name` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

同理,此操作僅對新增欄位生效,現有欄位需單獨轉換。

五、欄位級別編碼修改(徹底解決存量數據亂碼)

對於已有數據的表,需逐欄位執行 MODIFY 或 CHANGE 並指定 CHARACTER SET:

ALTER TABLE `tbl_name` MODIFY `col_name` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

或使用 CONVERT TO 一鍵轉換整表所有字符欄位:

ALTER TABLE `tbl_name` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

避坑指南:執行轉換前務必備份數據;大表操作會鎖表,建議低峰期執行或使用 pt-online-schema-change 等工具。

六、連接層編碼確認(應用端關鍵)

即使服務端配置完美,若 JDBC/ODBC/連接池未指定 characterEncoding=utf8mb4,仍會出現亂碼。典型連接串範例:

jdbc:mysql://host:3306/db?characterEncoding=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai

七、最佳實踐總結

  1. 全鏈路統一使用 utf8mb4 + utf8mb4_general_ci(或 utf8mb4_0900_ai_ci)。
  2. 配置文件落地 + 服務重啟,解決「源頭」問題。
  3. 存量庫表採用 CONVERT TO 逐表轉換,解決「存量」問題。
  4. 應用連接串顯式指定編碼,解決「傳輸」問題。
  5. 定期用 SHOW VARIABLES LIKE 'character_set%'; 巡檢,防止配置漂移。

掌握上述層級操作,即可從容應對 MySQL 字符編碼的各種場景,讓數據存儲與交互「零亂碼」。

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