首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MySQL 匯入 SQL 檔案失敗:語法錯誤 1064 完整解決方案

     編輯:程式設計疑難解答

使用 phpMyAdmin 匯入 SQL 檔案時遇到 `#1064 - You have an error in your SQL syntax` 錯誤,且錯誤訊息顯示亂碼(如 `涓繪`、`琛ㄧ`),通常是字元編碼不匹配或SQL 檔案損壞/格式錯誤導致。本文提供分層排查與解決步驟。

錯誤現象分析

  • 錯誤行附近出現非 ASCII 字元(中文亂碼),表明 SQL 檔案編碼與資料庫/連線編碼不一致。
  • 錯誤位置在 `INSERT` 語句中間,可能是某欄位資料包含未轉義的特殊字元(單引號、反斜線、換行符)。
  • phpMyAdmin 網頁介面上傳大檔案易超時或截斷,導致 SQL 語句不完整。

解決方案:由易至難

方法一:命令列 `source` 指令(最穩健,推薦大檔案)

# 1. 進入 MySQL 客戶端
mysql -u root -p

# 2. 選擇目標資料庫
mysql> USE your_database_name;

# 3. 執行匯入(指定絕對路徑,避免路徑問題)
mysql> SOURCE /full/path/to/backup.sql;

# 或單行指令
mysql -u root -p your_database_name < /full/path/to/backup.sql

優點:繞過 PHP/WEB 伺服器限制(上傳大小、執行時間、記憶體),直接由 MySQL 核心解析,支援超大檔案(GB 級)。

方法二:確認並統一字元編碼

  1. 檢查 SQL 檔案編碼:使用 Notepad++、VS Code 或 `file -i backup.sql` 確認編碼(應為 UTF-8 或 UTF-8MB4)。
  2. 資料庫/資料表編碼:
    SHOW VARIABLES LIKE 'character_set%';
    SHOW CREATE DATABASE your_db;
    SHOW CREATE TABLE your_table;
  3. 匯入前設定連線編碼(命令列):
    mysql> SET NAMES utf8mb4;
    mysql> SET CHARACTER SET utf8mb4;
    mysql> SOURCE /path/backup.sql;

方法三:phpMyAdmin 匯入前處理

  • 將 SQL 檔案以 UTF-8 (無 BOM) 編碼儲存。
  • 在 phpMyAdmin 匯入頁面,「檔案字元集」選擇 `utf-8` 或 `utf8mb4`。
  • 「SQL 相容性模式」選 `NONE` 或 `MYSQL40`。
  • 若檔案 > 2MB,修改 `php.ini`:`upload_max_filesize`、`post_max_size`、`max_execution_time`、`memory_limit`。

方法四:修復損壞的 SQL 檔案

若檔案確實損壞(截斷、亂碼):

  1. 使用 `head -n 100 backup.sql`、`tail -n 100 backup.sql` 檢查首尾完整性。
  2. 尋找錯誤行附近的 `INSERT` 語句,檢查欄位值是否包含未轉義單引號(如 `O'Reilly` 應為 `O\'Reilly`)。
  3. 使用 `sed` 或 Python 腳本批次修復:sed -i "s/\\'/''/g" backup.sql(MySQL 單引號轉義為雙單引號)。
  4. 若為 mysqldump 產出,重新匯出並加參數:`--default-character-set=utf8mb4 --hex-blob --skip-extended-insert`。

預防最佳實務

  1. 統一資料庫、資料表、連線、備份檔案編碼為 **utf8mb4**(支援 Emoji)。
  2. 定期使用 `mysqldump --single-transaction --routines --triggers --events` 完整備份。
  3. 大型資料庫避免 phpMyAdmin 匯入/匯出,改用命令列或 Percona XtraBackup。
  4. 備份檔案儲存前驗證:`mysql -u root -p test_db < backup.sql` 在測試庫跑一次。

遇到 1064 語法錯誤不要慌,優先用命令列 `source` 繞過中介層,再檢查編碼一致性,多數情況即可解決。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved