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

Eclipse/MyEclipse 連接 MySQL 中文亂碼終極解決方案

     編輯:MySQL 綜合教學

問題根因

中文亂碼本質是編碼不一致:IDE 文件編碼、JSP/Servlet 處理編碼、JDBC 連接串編碼、MySQL 服務端編碼、數據庫/表/列定義編碼——任一環節不匹配即產生亂碼。

第一層:IDE 文件編碼統一為 UTF-8

  1. Window → Preferences → General → Workspace,Text file encoding 選 Other: UTF-8。
  2. Window → Preferences → MyEclipse → Files and Editors,將 ASP/PHP、CSS、DTD、HTML、JSP、XML 全部設為 UTF-8。

第二層:Web 層請求/響應編碼過濾器

JSP 頁面頂部:

<%@ page contentType="text/html;charset=UTF-8" %>
<% request.setCharacterEncoding("UTF-8"); %>

Servlet 通用過濾器(推薦):

public class EncodingFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");
        chain.doFilter(req, resp);
    }
}

在 web.xml 註冊為首個 Filter,攔截所有路徑 /*。

第三層:JDBC 連接串顯式指定編碼

XML 配置(Druid/HikariCP/MyBatis/Spring):

<property name="connection.url">
  jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=utf8
</property>

Properties 文件:

jdbc.url=jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=utf8

關鍵參數說明:

  • useUnicode=true:啟用 Unicode 支持
  • characterEncoding=utf8:告知驅動以 UTF-8 與服務端交互(MySQL 5.5+ 推薦 utf8mb4)
  • autoReconnect=true:自動重連(生產環境建議由連接池管理)

第四層:MySQL 服務端配置(my.cnf / my.ini)

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'
skip-character-set-client-handshake  # 強制忽略客戶端編碼聲明,以服務端為準

注意: 修改後必須重啟 MySQL 服務。舊版文檔建議 gbk,現代應用統一使用 utf8mb4(支持 Emoji 與生僻字)。

第五層:數據庫/表/列級編碼檢查與修正

-- 查看數據庫編碼
SHOW CREATE DATABASE db_name;

-- 查看表編碼
SHOW CREATE TABLE tbl_name;

-- 修改數據庫默認編碼(不影響已有表)
ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

-- 修改表及所有列編碼(會重建表,大表慎用)
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

驗證清單

  1. 插入中文 → SELECT HEX(col) FROM tbl 檢查十六進制是否為 UTF-8 編碼(如「中」= E4B8AD)。
  2. JSP/頁面顯示正常、資料庫客戶端(Workbench/Navicat)顯示正常。
  3. 全鏈路 UTF-8,無需混用 GBK。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved