上線執行 SQL 腳本前,務必確認三個字符集一致:
SHOW CREATE TABLE / SHOW VARIABLES LIKE 'character_set%')。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)。mysqldump --default-character-set=latin1 ... | iconv -f latin1 -t utf8 ...。字符集不一致是「隱形殺手」,上線前三檢查,可省去無數加班夜。