首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

實戰案例:騰訊 CDB 環境下 MySQL 中文亂碼徹底解決

     編輯:MySQL 資料庫相關知識

現象回顧

  • 專案統一 UTF-8,自建 DB 服務器配置 UTF-8 正常
  • 遷移至騰訊 CDB(共享集群,默認 latin1,不可修改字符集)
  • 中文入庫變 ?? 或 ???,讀出同樣亂碼

轉折點

騰訊 DBA:「只要連線時設置的字符集與庫表字符集一致就沒問題」

解決步驟

  1. 確認庫表字符集為 UTF-8:SHOW CREATE TABLE ...
  2. JDBC 連接串新增顯式字符集參數:
    <connection-url>jdbc:mysql://10.139.120.128/wsgame?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8</connection-url>
  3. 重新部署驗證,中文讀寫完全正常

核心原理

MySQL 連線涉及三個字符集變量:

  • character_set_client:客戶端發送編碼
  • character_set_connection:服務端解析編碼
  • character_set_results:結果集返回編碼

SET NAMES utf8 等價於同時設定以上三者。JDBC 參數 characterEncoding 對應 client/connection,characterSetResults 對應 results。

最佳實踐總結

  1. 能控制服務端字符集時,統一設置為 UTF-8,連接串可省略參數
  2. 無法控制服務端(如共享 CDB)時,務必在連接串顯式指定三參數
  3. 應用層、JSP/HTML、資料庫、連接池、驅動程式全鏈路保持一致
  4. 遷移前用 SHOW VARIABLES LIKE 'character%' 對比兩環境差異
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved