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

MySQL 插入中文亂碼問題根因分析與三層解決方案

     編輯:MySQL 綜合教學

MySQL 中文亂碼徹底解決:資料庫、連線、應用三層編碼一致性

亂碼本質:編碼不一致。資料庫儲存編碼、連線傳輸編碼、應用程式編碼三者任一不匹配即產生亂碼。

根因排查清單

  1. 表/欄位編碼:SHOW CREATE TABLE tbl 確認 CHARSET=utf8mb4 (推薦) 或 utf8/gbk。
  2. 連線字符集:應用連線字串含 characterEncoding=utf8 (JDBC) 或執行 SET NAMES utf8mb4。
  3. 應用層編碼:Java 檔案 UTF-8、網頁 <meta charset="utf-8">、控制台編碼一致。

解決方案三步走

1. 修正資料庫/表/欄位編碼

-- 庫級
ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

-- 表級 (含現有欄位轉換)
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 單欄位
ALTER TABLE tbl_name MODIFY col_name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. 連線層指定編碼

  • JDBC:jdbc:mysql://localhost:3306/db?characterEncoding=utf8&useSSL=false (8.0+ 預設 UTF-8 可省略)
  • PHP PDO:charset=utf8mb4 在 DSN 中
  • Python PyMySQL:charset='utf8mb4' 參數
  • 通用 SQL:連線後立即執行 SET NAMES utf8mb4

3. 驗證流程

# 1. MySQL 終端直接插入測試
INSERT INTO tbl (col) VALUES ('測試中文');
SELECT * FROM tbl;  -- 終端顯示正常?

# 2. 應用打印實際 SQL
# 檢查 SQL 字串是否已含亂碼/問號

# 3. 檢查連線字串參數

WAMP 環境特別提醒

  • 終端連線需 mysql -u root (無 -p 密碼為空) 才有 root 權限。
  • my.ini 中 [mysqld] character-set-server=utf8mb4 生效需重啟服務。

擴展閱讀

深入理解 SET NAMES 三個變數:character_set_client / connection / results 關係圖解

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