最近遇到一個情境,在 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
這樣就可以正確匯入了。