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

MySQL 亂碼問題徹底解決:字符集不匹配診斷與 client/results 臨時與永久修正方案

     編輯:MySQL 綜合教學

MySQL 亂碼問題徹底解決:字符集不匹配診斷與 client/results 臨時與永久修正方案

一、現象與根因

向表插入中文報錯:Incorrect string value。根因:**系統預設編碼 GBK,MySQL 客戶端預設 utf8**,兩者不一致導致編碼轉換失敗。

插入中文報錯

二、診斷當前字符集

SHOW VARIABLES LIKE 'character%';

字符集變數

關鍵變數:

  • character_set_client:客戶端發送編碼
  • character_set_connection:連線層轉換目標編碼
  • character_set_results:結果集返回編碼
  • character_set_database/server:庫/服務級預設編碼

三、臨時修正(當前會話生效)

1. 解決插入報錯:設定客戶端編碼為 GBK

SET character_set_client = gbk;

設定 client=gbk

此時可正常插入中文。

2. 解決查詢顯示亂碼:設定結果集編碼為 GBK

SET character_set_results = gbk;

設定 results=gbk

查詢正常顯示中文

四、永久修正(修改 my.ini 重啟生效)

找到安裝目錄 my.ini,定位 [mysqld] 區塊:

[mysqld]
default-character-set=gbk   # 將 utf8 改為 gbk

修改前

修改後

重啟 MySQL 服務,驗證:

SHOW VARIABLES LIKE 'character%';

永久生效

之後所有會話自動使用 GBK,中文存取零障礙。

五、最佳實踐建議

  • **新專案統一使用 utf8mb4**;僅維護舊 GBK 系統時才改為 GBK
  • 應用層(JDBC/ODBC/PHP PDO)連線字串顯式指定 characterEncoding=utf8mb4
  • 資料庫/表/欄位層級顯式聲明 CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
  • 避免依賴服務級預設值,防止跨環境遷移出現編碼不一致
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved