現用サーバーの MySQL は Version 4.1.11 です。このシステムから新サーバー機の MySQL version 5.0.32 へ移行しようとしています。
新規ブログを作成、登録した場合には問題なく運用できていますが、旧版からダンプしたデータベースを新版へ流し込みした場合にはブログのデータベースから読み出した日本語が文字化けします(とても読めない文字です)。この移行したデータベースに2個目のブログを新規登録した場合も日本語の部分が文字化けします(日本語が????となります)。
移行したデータベースの中を Webmin - Server セクション - MySQL サーバーからテーブルの内容を文字コード UTF8 で開くと日本語が正常に読めます。
新規データベースを作成して Movable Type をインストールしたときの文字コードは MySQL も Movable Type も utf8 を使用して問題なく使用できます。
新サーバーの主な構成
debian 4.0r4a
perl v5.8.8
Apache2 v2.2.3
MySQL v5.0.32
旧サーバーの状況
$ mysql > status
Server Character = utf8
Db Character = utf8
Client Character = utf8
Conn Character = utf8
新サーバーの状況
$ mysql > status
Server Character = utf8
Db Character = utf8
Client Character = utf8
Conn Character = utf8
新サーバーの my.cnf に追記されている内容
[mysqld]
default-character-set=utf8
old-password=false
[client]
default-character-set=utf8
検索でそれらしきところを適用しても問題が解決しません。
1.[mysqld] に skip-character-set-client-handshake を追記する
2.mt-config.cgi に SQLSetNames=1
旧版では、MySQL の Dafault Character set は上記のようにすべて Latin1 となっています。2年前にはこれを同じ MySQL version 4 へ移行したときは問題なく移行できていました。
MySQL version 4.1 以降では文字コードの部分が大幅に修正・変更されて文字化けが発生し易くなったようです。また、環境によって一つの答えで解決しないのが問題を複雑にしているようですが。
解決! 2008/09/19
dump したファイル内にリストアするとき使用する CREATE TABLE statement の最終行に DEFAULT CHARSET = utf8 がありました。これを utf 8 へ書き換えれば、リストアするとき、希望の utf8 コードで書き込みます。
sed でコンバートしました。