-- my.ini / my.cnf
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
-- 建表指定
CREATE TABLE Company (
Cname VARCHAR(10) NOT NULL,
Caddr VARCHAR(100),
Ctel VARCHAR(16)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
String url = "jdbc:mysql://localhost:3306/test?"
+ "user=root&password=1"
+ "&useUnicode=true"
+ "&characterEncoding=utf-8"
+ "&autoReconnect=true"
+ "&useSSL=false"
+ "&serverTimezone=Asia/Taipei";
Connection conn = DriverManager.getConnection(url);
關鍵參數:useUnicode=true&characterEncoding=utf-8 (或 utf8mb4)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
// Filter 統一處理 (web.xml)
EncodingFilter
com.example.EncodingFilter
encoding
UTF-8
EncodingFilter
/*
// EncodingFilter.java 核心
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
req.setCharacterEncoding("UTF-8");
res.setCharacterEncoding("UTF-8");
res.setContentType("text/html;charset=UTF-8");
chain.doFilter(req, res);
}
// GET 參數亂碼 (ISO-8859-1 → UTF-8)
String name = request.getParameter("name");
name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
// 結果集亂碼
String name = new String(rs.getString("name").getBytes("ISO-8859-1"), "UTF-8");
SHOW VARIABLES LIKE 'character_set_%'; 全 utf8mb4SHOW CREATE TABLE 確認 CHARSETcharacterEncoding=utf-8URIEncoding="UTF-8"characterEncoding=utf-8 實為 utf8mb3characterEncoding=utf8mb4,推薦升級