[MySQL]バックスラッシュが含まれたデータがインポートできない場合の解決法

スポンサーリンク

概要

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

コメント