mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
目標:所有 character_set_*(除 filesystem、system、dir)均為 utf8(或 utf8mb4)。
SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_database = utf8;
SET character_set_results = utf8;
SET character_set_server = utf8;
僅當前連線有效,不可用於生產固化。
編輯 my.cnf(Linux)或 my.ini(Windows),在三個區塊**全部**加入:
[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'
[client]:影響 mysql、mysqldump 等客戶端工具。[mysql]:影響 mysql 互動式客戶端。[mysqld]:服務端預設字元集與校對規則,init_connect 讓每個新連線自動執行 SET NAMES utf8(超級用戶除外)。重啟 MySQL 後驗證:
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary|
| character_set_results | utf8 |
| character_set_server | utf8 | <-- 關鍵!
| character_set_system | utf8 |
+--------------------------+-------+
執行:
X:\Path\MySQL\MySQL Server 5.x\bin\MySQLInstanceConfig.exe
重新跑精靈,編碼頁面選 UTF-8,完成後自動更新 my.ini 並重啟服務,徹底解決 character_set_server 卡在 latin1 的頑疾。
CREATE TABLE t (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 表級指定
COLLATE 可不指定,預設 utf8_general_ci。header('Content-Type: text/html; charset=utf-8');mysqli_set_charset($link, 'utf8'); 或 PDO DSN 加 charset=utf8。jdbc:mysql://host:3306/db?characterEncoding=utf8| Java | MySQL |
|---|---|
| UTF-8 | utf8 / utf8mb4 |
| GBK | gbk |
| GB2312 | gb2312 |
| ISO-8859-1 | latin1 |
utf8 僅支援 BMP(3 字節),Emoji、生僻字需 utf8mb4(4 字節)。MySQL 5.5.3+ 支援:
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
既有表轉換:ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;