SOURCE 執行腳本時,若腳本檔案編碼與連線字元集不一致,中文會亂碼。核心原則:導出、導入、資料庫、連線四端編碼統一。
mysqldump -uroot -p --default-character-set=utf8mb4 dbname > backup.sql
mysql -uroot -p --default-character-set=utf8mb4 dbname < backup.sql
mysql -uroot -p --default-character-set=utf8mb4
USE dbname;
SOURCE /path/backup.sql;
在 SOURCE 前或腳本開頭執行:
SET NAMES utf8mb4;
-- 等同於
SET character_set_client = utf8mb4;
SET character_set_connection = utf8mb4;
SET character_set_results = utf8mb4;
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
重啟 MySQL 後所有新連線預設即為 utf8mb4。
# 建立主腳本 all.sql
echo "SOURCE /path/part1.sql;" > all.sql
echo "SOURCE /path/part2.sql;" >> all.sql
# ...
mysql -uroot -p dbname < all.sql
[mysqld]
max_allowed_packet = 256M
net_buffer_length = 16M
SET autocommit=0;
SOURCE huge.sql;
COMMIT;
mysqldump ... | Out-File -Encoding utf8 backup.sqlSET NAMES latin1 等舊指令會覆蓋連線編碼,導入前請檢查腳本前幾行。CHARSET=utf8mb4,會繼承伺服器預設(舊版為 latin1)。