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

MySQL 中文亂碼終極解決方案:字符集配置、腳本編碼與連接參數

     編輯:MySQL 綜合教學

MySQL 中文亂碼終極解決方案:字符集配置、腳本編碼與連接參數

中文亂碼核心原因:**存儲、連接、展示三環節字符集不一致**。本文提供系統排查與修復步驟。

排查步驟

  1. STATUS 或 SHOW VARIABLES LIKE 'character_set%'; 確認:
    character_set_server、character_set_database、character_set_connection、character_set_results、character_set_client 均為 utf8mb4。
  2. SHOW CREATE DATABASE db_name; 確認庫默認字符集。
  3. SHOW CREATE TABLE tbl_name; 確認表/列字符集。

修復方案

1. 建庫建表指定 utf8mb4

CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE t (c VARCHAR(100)) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. SQL 腳本文件編碼

記事本默認 ANSI,**另存為 UTF-8 (帶 BOM 或無 BOM 均可)** 再執行 SOURCE file.sql。

3. 連接層設置

  • JDBC URL:jdbc:mysql://host:3306/db?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
  • 命令行客戶端:mysql --default-character-set=utf8mb4
  • 應用代碼執行:SET NAMES utf8mb4;(等同於設定 connection/results/client 三者)。

4. 終端顯示亂碼處理

若數據庫存儲正確但終端顯示亂碼(如 \\xB1\\xB1),執行:

SET CHARACTER_SET_RESULTS = 'gbk';  -- 或 gb2312,視終端編碼而定

最佳實踐清單

  1. 全鏈路統一 utf8mb4(支援 Emoji,utf8 為 utf8mb3 別名,不支援補充平面)。
  2. 校對規則推薦 utf8mb4_unicode_ci(準確排序)或 utf8mb4_0900_ai_ci(8.0 默認,性能更好)。
  3. 避免隱式轉換:列字符集與連接字符集不同時會觸發轉換,導致索引失效。
  4. 配置文件 my.cnf 固化:
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved