首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 導入 .sql 檔案時換行符 \n 處理錯誤解決方案

     編輯:MySQL 資料庫相關知識

問題現象

資料表欄位含換行資料(如 PHP 序列化陣列 array('a'=>'b',\n'c'=>'d')),mysqldump 導出時換行轉為 \n。使用重導向導入:

mysql -h localhost -u root -p < backup.sql

報錯:ERROR: 未識別的 "\n" 字符,導入中斷。

根本原因

  • Shell 重導向 (<) 由 Shell 直接餵給 MySQL 客戶端,\n 被視為字面字串而非跳脫序列。
  • MySQL 客戶端互動模式下,SOURCE 指令會正確解析跳脫序列。

解決方法

方法 1:使用 SOURCE 指令(推薦)

mysql -h localhost -u root -p
mysql> SOURCE /path/backup.sql;

互動模式下 MySQL 會正確處理 \n、\r、\t 等跳脫字元。

方法 2:mysqldump 導出時不轉義換行

mysqldump --hex-blob -u root -p db_name > backup.sql

--hex-blob 將二進位/文字欄位以十六進位導出(如 0x6172726179...),避開跳脫字元問題。

方法 3:導入前預處理(不推薦)

sed -i 's/\\n/\n/g' backup.sql  # 僅在確定無其他副作用時使用

最佳實踐

  1. 導入大檔案一律用 SOURCE,而非 Shell 重導向。
  2. 導出加上 --hex-blob --single-transaction --master-data=2 確保一致性與相容性。
  3. 定期驗證備份可還原,納入災難演練流程。

掌握此技巧,避免因換行符導致備份無法還原的風險。

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