JSP 頁面編碼 → Java 內部 Unicode → JDBC 連線字元集 → MySQL 資料表/欄位編碼
若任何一環不符,中文即顯示亂碼或存入錯誤位元組。
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
contentType:回應 HTTP Header Content-Type: text/html; charset=UTF-8。pageEncoding:JSP 檔案本身儲存編碼(IDE 需同步設為 UTF-8)。// MySQL 5.1+ Connector/J
String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true";
// 或 8.0+ (characterEncoding 預設 UTF-8,可省略)
String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Asia/Taipei";
useUnicode=true:啟用 Unicode 支援。characterEncoding=UTF-8:傳輸編碼設為 UTF-8。&useOldUTF8Behavior=true。-- 建庫指定
CREATE DATABASE mydb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 建表指定
CREATE TABLE t (c VARCHAR(100)) DEFAULT CHARSET=utf8mb4;
-- 修改既有表/欄位
ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
強烈建議用 utf8mb4(支援完整 Unicode 含 Emoji),而非舊版 utf8(僅 BMP 平面,3 bytes/字)。
contentType="text/html;charset=GB2312" / pageEncoding="GB2312"characterEncoding=GBK(GB2312 超集,相容性更好)DEFAULT CHARSET=gbkString gbk = new String(utf8.getBytes("ISO-8859-1"), "GBK");(經典錯誤修正範式)utf8 而非 utf8mb4 → 存 Emoji/生僻字報錯 Incorrect string value。原文標題:jsp MySQL 的中文問題
連結:https://www.cnblogs.com/bobomail/archive/2005/03/18/121068.html