概要
mysqldumpなどで生成したSQLデータにバックスラッシュのデータが含まれている場合、インポート時にYou have an error in your SQL syntaxとなってしまうことがある。
原因
MySQLのバージョンや設定によって状況は異なるが、エクスポートするMySQLとインポートするMySQLのcharsetやcollationの相違が原因と考えられる。
解決方法
インポートやエクスポート時に–default-character-set=utfmb4オプションを指定すると解決することができる。
mysqldump xxx -uyyy -p --default-character-set=utf8mb4 > dump.sql
mysql xxx -uyyy -p --default-character-set=utf8mb4 < dump.sql
PROCESS特権
なお、MySQL5.7以降でmysqldumpを実行するとError: ‘Access denied; you need (at least one of) the PROCESS privilege(s) for this operation’ when trying to dump tablespacesと表示されることがある。
これは「テーブルスペース情報というものにアクセスするにはPROCESS特権が必要である」というものである。
データをdumpするだけであればスペース情報は不要なので、–no-tablespacesオプションを指定して実行することでエラーは表示されなくなる。
mysqldump xxx -uyyy -p --no-tablespaces --default-character-set=utf8mb4 > dump.sql
コメント