首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

解決 JSP 中文亂碼:MySQL 資料庫、資料表、欄位編碼修改指南

     編輯:Java 相關知識

前言

JSP 專案中文亂碼是初學者常見的痛點。亂碼成因眾多,涉及伺服器、資料庫、資料表、欄位、JSP 頁面、瀏覽器提交等多個環節。本文系統整理亂碼成因,並提供 MySQL 編碼修改的實用 SQL 指令。

八大亂碼成因分析

  1. MySQL 安裝時編碼設定:安裝過程選擇的預設編碼若與網頁不一致,會造成亂碼
  2. 建立資料庫時編碼設定:phpMyAdmin 或 MySQL-Front 建庫時指定的編碼
  3. 建立資料表時編碼設定:CREATE TABLE 時的 CHARSET 參數
  4. 欄位層級編碼設定:個別欄位可獨立指定 CHARACTER SET
  5. 提交頁面與顯示頁面編碼不一致:例如輸入頁用 Big5,顯示頁用 GB2312,必然亂碼
  6. 字符集宣告錯誤:HTML meta 標籤或 JSP page 指令的 charset 設定錯誤
  7. JDBC 連線字串未指定編碼:連線 URL 缺少 characterEncoding 參數
  8. JSP 未設定請求編碼:缺少 request.setCharacterEncoding()

編碼知識補充:GB2312 vs GBK vs UTF-8

  • GB2312:簡體中文標準,收字約 6,763 個
  • GBK:GB2312 擴展版,支援繁體中文、日韓字符,約 21,000 字
  • UTF-8:Unicode 實作,涵蓋全球所有語言,現代 Web 開發首選

建議:新專案直接採用 UTF-8;舊專案若無法全面轉換,可考慮 GBK 相容簡繁混雜情況。

MySQL 編碼修改實戰指令

1. 修改資料庫預設編碼

ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

僅影響後續新建的資料表,既有資料表不受影響。

2. 修改資料表預設編碼

ALTER TABLE `category` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

同樣僅影響後續新增的欄位。

3. 修改欄位編碼(關鍵步驟)

ALTER TABLE `test` CHANGE `dd` `dd` VARCHAR(45) 
CHARACTER SET utf8 COLLATE utf8_bin NOT NULL;

注意:需完整重述欄位定義(型別、長度、NULL/NOT NULL 等),否則會導致欄位屬性遺失。

4. 一次轉換資料表所有欄位(MySQL 5.0+)

ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;

JSP 端配套設定

頁面指令宣告編碼

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

JDBC 連線字串指定編碼

// MySQL 5.1+ 驅動
String url = "jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8";

// 完整範例
private String url = "jdbc:mysql://localhost/" + DB_NAME 
    + "?user=" + LOGIN_NAME 
    + "&password=" + LOGIN_PASS 
    + "&useUnicode=true&characterEncoding=UTF-8";

設定請求編碼(必須在讀取參數前)

<%
    request.setCharacterEncoding("UTF-8");
    // 然後才能 request.getParameter(...)
%>

重要觀念:資料已寫入錯誤編碼無法單純靠修改設定修復

「按照以上方法修改以後只能保證你新插入的數據不會亂碼。如果你用戶已提交的數據是 BIG5,你卻想通過以上方法改為可以在 GB2312 的網頁正確顯示是不可能的,這種文字內碼的變換只能通過另寫程序來解決。」

歷史資料修復需撰寫轉碼程式:讀出 → 以正確編碼解碼 → 以目標編碼編碼 → 寫回。

除錯檢查清單

  1. 確認 JSP 頁面 contentType 與 pageEncoding 設定
  2. 確認 HTML <meta charset="UTF-8"> 存在
  3. 確認 request.setCharacterEncoding("UTF-8") 在最早執行
  4. 確認 JDBC URL 含 useUnicode=true&characterEncoding=UTF-8
  5. 確認資料庫、資料表、欄位編碼均為 UTF-8
  6. 確認表單提交 <form accept-charset="UTF-8">

總結

中文亂碼本質是「編碼不匹配」。解決策略是全鏈路統一編碼:資料庫 → 連線 → JSP → 瀏覽器 全部採用 UTF-8。新專案一開始就設定正確,可避免 99% 的亂碼問題。

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