插入中文顯示 ??? 或亂碼,SHOW VARIABLES LIKE 'character%'; 多項為 latin1。
mysql> SET character_set_server = utf8;
mysql> SET character_set_database = utf8;
mysql> SET character_set_connection = utf8;
mysql> SET character_set_client = utf8;
mysql> SET character_set_results = utf8;
若此後插入正常,說明編碼不匹配是根因。
找到 MySQL 安裝目錄下 my.ini(如 C:\Program Files\MySQL\MySQL Server 5.7\my.ini),在三個區塊**全部**加入:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
init_connect='SET NAMES utf8'
重啟服務:
net stop mysql
net start mysql
?characterEncoding=utf8&useSSL=falsemysqli_set_charset($link, 'utf8'); 或 PDO DSN charset=utf8charset='utf8' 參數mysql> SHOW VARIABLES LIKE 'character%';
-- 確認 client/connection/database/results/server 均為 utf8
mysql> INSERT INTO t(name) VALUES('測試中文');
mysql> SELECT * FROM t; -- 應正常顯示
| 遺漏點 | 後果 |
|---|---|
| 未改 [client] 區塊 | mysqldump 導出亂碼 |
| 未改 [mysql] 區塊 | 命令列互動亂碼 |
| 應用端未 SET NAMES | 寫入仍為 latin1 |
| JDBC URL 缺 characterEncoding | 驅動按預設 latin1 解碼 |