首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 字符集亂碼避坑指南:執行腳本前必檢字符集、連線字符集三一致原則

     編輯:MySQL 資料庫相關知識

上線執行 SQL 腳本前,務必確認三個字符集一致:

  1. 腳本檔案編碼 (Notepad++ / VS Code 右下角顯示 UTF-8/GBK)。
  2. 資料庫/資料表/欄位字符集 (SHOW CREATE TABLE / SHOW VARIABLES LIKE 'character_set%')。
  3. 連線字符集 (應用端 JDBC URL characterEncoding、SET NAMES utf8mb4)。

一次真實事故:腳本為 UTF-8,資料表為 latin1,連線未 SET NAMES,導致中文入庫變亂碼,頁面顯示「鑰匙扣」→「????」。修正:ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4; + 應用加 characterEncoding=utf8 + 重新匯入。

快速檢查指令


-- 1. 伺服器層級
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

-- 2. 資料庫層級
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='db_name';

-- 3. 資料表層級
SHOW CREATE TABLE t;

-- 4. 欄位層級
SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='db' AND TABLE_NAME='t';

統一字符集最佳實務

  • 新建庫表預設 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci (或 utf8mb4_0900_ai_ci 8.0+)。
  • 應用啟動時執行 SET NAMES utf8mb4 (JDBC characterEncoding=utf8 + connectionCollation=utf8mb4_general_ci)。
  • 腳本檔案統一儲存為 UTF-8 (BOM-less)。
  • 遷移舊庫:mysqldump --default-character-set=latin1 ... | iconv -f latin1 -t utf8 ...。

字符集不一致是「隱形殺手」,上線前三檢查,可省去無數加班夜。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved