本サイトは、さくらインターネット上で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