MySQL 默認字符集 latin1 不支援中文,導致插入漢字顯示亂碼/問號。本文提供 Linux(修改 my.cnf)與 Windows(修改 my.ini)雙平台完整修改流程,推薦使用 utf8mb4 完整支援 Unicode(含 Emoji),並解決 JSP 頁面編碼協同問題。
SHOW VARIABLES LIKE 'character_set_%';
關鍵變量:character_set_server、character_set_database、character_set_client/connection/results。若為 latin1 需修改。

service mysql stopvim /etc/mysql/my.cnf(或 /etc/my.cnf),在 [mysqld] 區塊添加:[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'

service mysql startSHOW VARIABLES LIKE 'character_set_%'; 全部應為 utf8mb4。
net stop mysql 或服務管理器。C:\Program Files\MySQL\MySQL Server 5.x\my.ini:[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
net start mysql 或右鍵「我的電腦 → 管理 → 服務 → MySQL → 重新啟動」。
修改 JSP 頁面指令:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
確保:
jdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=utf8mb4&zeroDateTimeBehavior=convertToNull全鏈路 UTF-8/utf8mb4 才能徹底解決亂碼。
-- 1. 修改表默認字符集(不轉換數據)
ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 2. 若數據已被錯誤存儲為 latin1(雙重編碼),需雙重轉換
UPDATE t SET col = CONVERT(CAST(CONVERT(col USING latin1) AS BINARY) USING utf8mb4);
新建實例直接設置 utf8mb4;既有實例按平台修改配置文件重啟;應用層全鏈路統一編碼;歷史亂碼數據用 CONVERT ... USING 修復。utf8mb4 兼容 utf8 並支援 Emoji,是現代 MySQL 唯一推薦字符集。