Java 代碼插入中文 → 數據庫顯示 ?;phpMyAdmin / 客戶端插入正常。
JDBC 驅動默認連接字符集可能為 latin1 或平台默認編碼,導致中文在傳輸層被錯誤編碼寫入。phpMyAdmin 強制使用 UTF-8 連接,故正常。
String url = "jdbc:mysql://localhost:3306/your_db?characterEncoding=UTF-8&useUnicode=true&serverTimezone=Asia/Shanghai";
Connection conn = DriverManager.getConnection(url, "user", "pass");
| 參數 | 作用 |
|---|---|
characterEncoding=UTF-8 | 強制連接層使用 UTF-8 編碼傳輸 SQL 文本與結果集 |
useUnicode=true | 啟用 Unicode 支持 (舊版驅動需配合) |
serverTimezone=Asia/Shanghai | 避免時區解析警告/錯誤 (MySQL 5.7+/8.0 必加) |
zeroDateTimeBehavior=CONVERT_TO_NULL | 處理 0000-00-00 日期 (可選) |
SELECT HEX(column) FROM table,應看到 E4B8ADE69687 (UTF-8 "中文") 而非 3F (?)。CREATE DATABASE your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE t (c VARCHAR(255)) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
utf8mb4 支持完整 Unicode (含 Emoji),utf8 僅支持 BMP (3 字節)。