首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Servlet 向 MySQL 插入中文變方塊亂碼的完整編碼鏈路排查

     編輯:程式設計綜合問答

編碼鏈路

JSP (pageEncoding=UTF-8) 
  → request.setCharacterEncoding("UTF-8") 
  → Servlet getParameter 
  → JDBC URL: jdbc:mysql://...?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
  → MySQL 表/庫/欄位 CHARSET=utf8mb4

關鍵配置

  1. JSP 頁面:`<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>`
  2. Servlet 過濾器/開頭:`request.setCharacterEncoding("UTF-8");` (必須在 `getParameter` 前)。
  3. JDBC 連接串:`useUnicode=true&characterEncoding=utf8` (或 `utf8mb4` 支持 Emoji)。
  4. 數據庫:`CREATE DATABASE db CHARSET utf8mb4; ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4;`

排查步驟

  1. 檢查控制台 `System.out.println(name)` 是否已亂碼 → 是則問題在請求解碼階段。
  2. 檢查 MySQL `SELECT HEX(col) FROM t` 存儲字節 → 正確 UTF-8 中文為 3 字節 (如 E4B8AD)。
  3. 排除連接池配置覆蓋編碼參數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved