SQL 中帶中文參數時查無結果,純英文/數字正常。已嘗試設置連接字符集、表字符集均為 UTF-8,問題依舊。
request.getParameter("key"),確認是否為正確中文而非亂碼(如 %E4%B8%AD%E6%96%87 未解碼)。?useUnicode=true&characterEncoding=utf-8。SHOW CREATE TABLE t; 確認 CHARSET=utf8mb4(推薦)或 utf8。EXPLAIN SELECT ... WHERE col='中文'; 觀察 ref 類型與 rows。SET NAMES utf8 就萬事大吉 —— 必須在連接建立前指定(JDBC URL 參數)。server.xml URIEncoding="UTF-8" 僅影響 GET 請求 URL 解碼,POST 請求體需 request.setCharacterEncoding("UTF-8")。utf8 實為 utf8mb3,不支援 Emoji/生僻字,生產環境請用 utf8mb4。# JDBC URL
jdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
# MySQL 服務端 my.cnf
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 表建表
CREATE TABLE t (col VARCHAR(100)) CHARSET=utf8mb4;
-- 查看實際執行的 SQL(開啟一般日誌或慢查詢日誌)
SET GLOBAL general_log = 1;
SET GLOBAL log_output = 'TABLE';
SELECT * FROM mysql.general_log ORDER BY event_time DESC LIMIT 10;
中文參數查空 99% 是「參數到達服務端前已亂碼」或「連接字符集未生效」。優先打印接收參數,再按「請求解碼 → 連接字符集 → 存儲字符集」鏈路逐環排查。