現在構築中のWebサイトのCMSにModx(version 0.9.6.1)を導入しているのですが、ローカルで構築したxampp上のModxのデータベースをlolipopに移そうとすると、どうしても文字化け状態で出力されてしまう。ローカルでは文字化けしてないのに。なんで?なんで?なんで?
普通なら
- phpMyAdminを用いてデータベースをエクスポート
- それをlolipopのphpMyAdminからインポート
するだけなのに、どーもこのままでは見事に文字化けしてしまって上手くいかない。Modx経由でエクスポートしたり、EUC,SJISエンコードに変換してみたり、エクスポートファイルをUTF8に変換してみても全く意味がなし・・・う~ん・・・このままじゃ安心してバイトにもいけません。
数時間ほど格闘した結果、どうやらphpMyAdmin経由でMySQLのエクスポートを行うとphpMyAdminが『親切なことに』テーブルに設定してある照合順序の文字コードに変換して出力してくれるらしいことが判明しました(自分の場合はLatin1でした)。
つまり自分の場合ですと、phpMyAdmin側からするとエクスポートの際、
- Latin1の文字をUTF-8に変換してくれている
はずなのに、実際はModx側のミス(といっても問題ないと思う)で、最初のデータベース作成の部分で照合順序にLatin1をデフォルトで指定してしまっているため、
- UTF-8の文字をさらにUTF-8に変換する
という二重変換が行われていた結果、文字化けが生じてしまったらしい。よけいなことをー
それでこの問題をどうすればいいのか。だらだらと書いてきたけど解決方法は容易で、要は『変な文字コード変換をせずに生のデータ(バイナリ)を出力する』ようにすればよい。そうすればもともとデータベーステーブルにはUTF-8状態でデータが存在しているので、生の状態でもきちんとしたUTF-8の文章が出力されることになるはずです。
phpMyAdminはバイナリ状態でエクスポートすることはできないので、そのために今回は"MySQLDump"を使用して、コマンドプロンプトから
mysqldump -u root -p --compact --compatible=mysql40 --default-character-set=binary "データベース名" > "出力ファイル名"
注)--compatible=mysql40オプションはlolipopのMysqlのバージョンがローカルのより低かったからつけただけです。他のレンタルサーバ(xreaとか)はなくてもいいかも。
を実行!見事バイナリ形式で出力されましたので、これをlolipopにインポート。無事文字化けしないでデータベースがインポートされました。ふぅ。
Modxの文字化けに悩んで検索から飛んできた人はぜひ試してください~
0 件のコメント:
コメントを投稿