読者です 読者をやめる 読者になる 読者になる

プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

【MySQL】 mysqldumpでのバックアップとリストア時の文字化けについて

本サイトは、さくらインターネット上でJoomla!を使って構築しています。この際、DBとしてMySQLを利用しているので、定期的にバックアップを、mysqldump で取るようにしました。

 

で、データのリストアを試してみたら、一部の文字が文字化けをしていました(具体的には空白が、?になってました)。

ダンプしたデータそのものを調べるとダンプ時に既にもう文字化けしています。これは典型的な文字コードの指定ミスですね。

 

ダンプ時には特に文字コードに関するオプションを指定していなかったので、未指定時のデフォルトオプションを調べると、さくらインターネットの場合、

/usr/local/mysql/5.5/etc/my.cnf

に設定が書いてあり、

[mysqldump]
default-character-set=ujis

となっていました。

ここで、mysqldump のコマンドラインオプションを調べると、--default-character-set というオプションがあり、これでダンプ時の文字コード変換を指定するようです。

 

ということで、mysqldump 実行時に文字コードの指定を特にしていなかったので、このデフォルトオプションが有効になり、文字化けが起こっていたようです。

(実際、文字化けが起こっていたダンプファイルは、テキストエディタで開くと、文字コードがEUCとなってました。)

 

解決策は、ダンプ時に文字コード変換をしないようにすればOKです。

--default-character-set=binary

としたところ、問題なくダンプ・リストアできました。

めでたしめでたし。

 

(参考)

http://blog.livedoor.jp/spyder_5615/archives/26578293.html

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34534&forum=26