萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL SOURCE 命令導入資料亂碼與大檔案解決方案

亂碼根因

SOURCE 執行腳本時,若腳本檔案編碼與連線字元集不一致,中文會亂碼。核心原則:導出、導入、資料庫、連線四端編碼統一。

標準化導出導入流程

1. 導出時指定編碼

mysqldump -uroot -p --default-character-set=utf8mb4 dbname > backup.sql

2. 導入時指定編碼

mysql -uroot -p --default-character-set=utf8mb4 dbname < backup.sql

3. SOURCE 互動模式導入

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;

永久生效:修改 my.cnf / my.ini

[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;

常見坑點

  • Windows PowerShell 預設輸出 UTF-16,需 mysqldump ... | Out-File -Encoding utf8 backup.sql
  • 腳本內含 SET NAMES latin1 等舊指令會覆蓋連線編碼,導入前請檢查腳本前幾行。
  • 資料庫/表建立語句未指定 CHARSET=utf8mb4,會繼承伺服器預設(舊版為 latin1)。
copyright © 萬盛學電腦網 all rights reserved