客戶端、連線、伺服器、資料庫、資料表、欄位六層字符集不一致,導致編碼轉換錯誤。核心原則:**全鏈路統一為 UTF-8(或 utf8mb4)**。
mysql> SET NAMES latin1; -- 或 utf8 mysql> SOURCE test.sql;
臨時生效,適合一次性匯入腳本。
-- test.sql 開頭 SET NAMES latin1; INSERT INTO ...;
mysql> SOURCE test.sql;
mysql -uroot -p123456 --default-character-set=latin1 test < test.sql
不需修改 SQL 檔,適合自動化部署腳本。
[client] default-character-set=utf8 [mysqld] # 5.1 以前 default-character-set=utf8 # 5.5+ 推薦 character-set-server=utf8 collation-server=utf8_general_ci
修改後**重新登入**即可生效(無需重啟服務)。
CREATE DATABASE wyb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE TABLE t (c VARCHAR(100)) CHARSET=utf8mb4;
強烈建議使用 utf8mb4** 完整支援 Emoji 及罕見漢字,避免 utf8 截斷 4 字節字符。
SHOW VARIABLES LIKE 'character_set%'; +--------------------------+--------+ | Variable_name | Value | +--------------------------+--------+ | character_set_client | utf8 | -- 客戶端發送編碼 | character_set_connection | utf8 | -- 連線轉換編碼 | character_set_database | utf8 | -- 預設庫編碼 | character_set_results | utf8 | -- 結果集回傳編碼 | character_set_server | utf8 | -- 伺服器預設編碼 +--------------------------+--------+
SET NAMES utf8 等同於同時設定 client、connection、results 三個變數。