| 層級 | 查看命令 | 說明 |
|---|---|---|
| 服務器級 | SHOW VARIABLES LIKE 'character_set_server'; | 默認字符集 |
| 數據庫級 | SHOW CREATE DATABASE db_name; | 庫默認字符集 |
| 表級 | SHOW CREATE TABLE tbl_name; | 表默認字符集 |
| 列級 | SHOW FULL COLUMNS FROM tbl_name; | 列實際字符集 |
| 連接/會話級 | SHOW VARIABLES LIKE 'character_set_%'; | client/connection/results 三關鍵變量 |
character_set_results ≠ 客戶端期望編碼 → 返回時錯誤轉換[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-character-set-client-handshake # 強制忽略客戶端請求編碼
SET NAMES utf8mb4; -- 等同於同時設置 client/connection/results
-- 或
SET character_set_client = utf8mb4;
SET character_set_connection = utf8mb4;
SET character_set_results = utf8mb4;
-- 庫級
ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
-- 表級(僅修改默認,不轉換現有列)
ALTER TABLE tbl_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
-- 列級(實際轉換數據,會鎖表重建)
ALTER TABLE tbl_name MODIFY col_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 一鍵轉換表及所有列(慎用!大表極慢)
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
mysqldump -u root -p --default-character-set=latin1 db_name > dump.sql(以舊編碼導出,防止雙重轉換)SET NAMES latin1 改為 SET NAMES utf8mb4,表定義中 CHARSET=latin1 改為 utf8mb4mysql -u root -p new_db < dump.sql或使用 iconv 工具轉換文件編碼:
iconv -f utf8 -t gbk dump_utf8.sql > dump_gbk.sql
mysql -u root -p --default-character-set=gbk new_db < dump_gbk.sql
characterEncoding=utf8mb4,PHP PDO 設置 SET NAMES utf8mb4_utf8mb4'字符串' 或 N'字符串' 顯式聲明