-- 1. 設定三大變數為 latin1
SET NAMES latin1;
-- 或單獨設定
SET character_set_client = latin1;
SET character_set_connection = latin1;
SET character_set_results = latin1;
-- 2. 確認生效
SHOW VARIABLES LIKE 'character_set_%';
-- 3. 建立 latin1 資料庫與表
CREATE DATABASE db_latin1 CHARACTER SET latin1;
USE db_latin1;
CREATE TABLE tab_latin1 (name VARCHAR(50)) CHARACTER SET latin1;
-- 4. 插入中文(假設 cmd 為 GBK 編碼)
INSERT INTO tab_latin1 VALUES ('測試中文'), ('测试中文');
-- 5. 查詢驗證
SELECT * FROM tab_latin1;
-- 應正常顯示中文
資料流向:客戶端編輯器編碼 → character_set_client → character_set_connection → 儲存層(server/database/table/column 繼承鏈) → character_set_results → 客戶端顯示工具解碼。
character_set_server
↓ (未指定時繼承)
character_set_database
↓
character_set_table (隱含)
↓
character_set_column (隱含)
配置檔 my.ini 可設定 character-set-server 為鏈路源頭。
character_set_filesystem:檔案系統路徑轉換,預設 binary 不轉換character_set_system:永遠為 utf8,存儲表名、列名、用戶名等元資料character_set_dir:字符集定義檔目錄(XML 格式)SET NAMES latin1,最通用、零損失SHOW COLLATION LIKE 'utf8%' 查看 UTF-8 校對_ci 尾綴 = case insensitive(大小寫不敏感)掌握轉換原理,亂碼問題迎刃而解。