MySQL 中文亂碼本質是編碼不一致:客戶端發送編碼 ≠ 服務器解析編碼 ≠ 存儲編碼 ≠ 讀取編碼。四個環節任一斷點即產生亂碼。
[mysqld] character_set_server = utf8mb4 collation_server = utf8mb4_general_ci [client] default_character_set = utf8mb4 [mysql] default_character_set = utf8mb4
| 語言/框架 | 配置方式 |
|---|---|
| JDBC | jdbc:mysql://host:3306/db?characterEncoding=utf8mb4&useUnicode=true&zeroDateTimeBehavior=convertToNull |
| Python (PyMySQL) | charset='utf8mb4' 參數 |
| Go (go-sql-driver/mysql) | charset=utf8mb4,utf8 DSN 參數 |
| PHP (PDO) | SET NAMES utf8mb4 執行或 DSN charset=utf8mb4 |