解決 MySQL 資料庫備份還原錯誤 ERROR: ASCII ‘\0’ appeared in the statement

最近遇到一個情境,在 Windows 使用 PowerShell 使用 mysqldump 把 MySQL / MariaDB 資料庫匯出 SQL 檔案,然後在 Linux 環境底下用 mysql 指令匯入,

卻出現一個很莫名錯誤:

$ mysql -u root -p myDatabase < /backup.sql
Enter password: 
ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: '-'.

這原因出現在 PowerShell,的 > 資料流重導向 (I/O Redirection) 語句,
會使用 UTF-16LE 和 CR/LF 換行符號來建立檔案。

這些在 mysql 指令中不認得,他目前只認 UTF-8。
所以要做一些修改。

從 MySQL / MariaDB 資料庫匯出

mysqldump 匯出指令有修改

原本為:(此在 Windows (PowerShell) 環境下執行)

PS> .\mysqldump -h localhost -u root -p myDatabase > backup.sql

改為新指令

PS> .\mysqldump -h localhost -u root -p myDatabase -r backup.sql

改用 -r 指令,讓 mysqldump 「直接操作檔案」,這樣就不會出現這個問題了。

匯入新的 MySQL / MariaDB 資料庫

匯入指令相同:(此在 Linux 環境下執行)

$ mysql -u root -p myDatabase < /backup.sql

這樣就可以正確匯入了。

參考資料