萬盛學電腦網

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

mysqldump 導入報錯「Unknown command」解決:字符集指定與 source 替代方案

使用 mysql < backup.sql 導入 mysqldump 導出檔案時,若出現 ERROR at line N: Unknown command '[',絕大多數是**字符集不匹配**導致 SQL 腳本被錯誤解析。本文給出根因分析、標準解決方案與替代導入方式。

錯誤現象


# 錯誤命令
mysql forum < forum.sql -u root -p -h 192.168.0.8
Enter password: ******

ERROR at line 1410: Unknown command '['

根因分析

  • mysqldump 預設以 **utf8mb4** 導出(含 SET NAMES utf8mb4 等指令)。
  • 導入時若未指定 --default-character-set,客戶端按系統預設字符集(如 latin1/gbk)解析 SQL 文本。
  • 多字節字符(中文、Emoji)在錯誤字符集下被誤切分,導致 SQL 語法解析器遇到非法字節序列(如 0x[...]),報 Unknown command。

標準解決方案:導入時指定字符集


mysql -u root -p --default-character-set=utf8mb4 目標資料庫 < 備份檔.sql

**關鍵點**:--default-character-set 必須放在資料庫名**之前**,且與導出時一致(通常為 utf8mb4)。

替代方案:SOURCE 命令(交互模式)


mysql -u root -p --default-character-set=utf8mb4
mysql> USE 目標資料庫;
mysql> SET NAMES utf8mb4;
mysql> SOURCE /完整路徑/備份檔.sql;
  • SOURCE 在客戶端執行,受 SET NAMES 影響,靈活度高。
  • 路徑必須為**伺服器可讀的絕對路徑**;Windows 路徑用正斜槓 D:/backup/file.sql 或雙反斜槓 D:\\backup\\file.sql。

跨主機直接遷移(無落地檔案,避開字符集問題)


# 從 host1 導出並直接導入 host2
mysqldump -h host1 -u user -p db_name | mysql -h host2 -u user -p db_name
  • 管道傳輸,數據不經磁碟,速度最快、字符集自動協商。
  • 大數據量建議加 --quick(mysqldump 預設開啟)與 --compress(網路傳輸壓縮)。

預防措施:導出時就固定字符集


mysqldump --default-character-set=utf8mb4 -u user -p db_name > backup.sql

導出檔案開頭會包含 SET NAMES utf8mb4,導入時只要客戶端支援 utf8mb4 即可自動識別,即使忘記加參數也多半不會亂碼。

排查清單

  1. 導出命令是否帶 --default-character-set=utf8mb4?
  2. 導入命令是否帶 --default-character-set=utf8mb4?
  3. 目標資料庫/表/欄位字符集是否為 utf8mb4?
    SHOW CREATE DATABASE db; SHOW CREATE TABLE tbl;
  4. 客戶端版本是否支援 utf8mb4(MySQL 5.5.3+、MariaDB 5.5+、所有 8.0+)?
copyright © 萬盛學電腦網 all rights reserved