GLATTS Quality を維持向上させるために…

WordPress ME2.2.3 から日本語版2.5.1へ移行(手順編) : Imai blog で移行手順を書きましたが、初めはwp-content/upgrade.phpでデータベース変換をおこなったら、記事などデータベースから取り出している日本語が全て文字化けしていました。loginもできません。wp-config.phpに増えた

define('DB_CHARSET', 'utf8');

が関係ありそう。ちなみにこの行をコメントアウトしたら正常に表示され、loginもできました。でもこのまま使用し続けると後々面倒になるかもしれないと思い、define('DB_CHARSET', 'utf8');を有効にしたまま動くようにできないかとネットで情報を探しましたがわかりません。当てずっぽうに、alter table で、CONVERT TO CHARACTER SETDEFAULT CHARACTER SET をしても駄目でした。どうもMEで使っていたテーブルのデフォルト文字セットと実際に入っているデータの文字セットが異なっていることが問題であることはわかったのですが、このときはもう深夜で眠気に勝てず頭も回らないので、とりあえずWordPressをMEに戻して終了。

次の日、もう一度整理しなおしました。(操作している端末のエンコードはutf-8です)

まず、DB_CHARSETを使っているところを探すとwp-include/wp-db.php内のSET NAMESで使われていました。

次に、初めから日本語版2.5.1をインストールしたデータベースとME2.2.3のデータベースを比較しました。

これらの結果から、

と判断。ここから日本語版のupgrade.phpを動かす前に、中のデータは変更せずにデフォルト文字セットをlatin1からutf8に変更すればうまくいくのではないかと予想。(そもそもデフォルト文字セットがlatin1なのに中のデータがutf8で入っていることがおかしい?)

ところが、その方法がわからない。前日やったようにalter tableではデータが変わってしまうようだ。(*1)

いろいろ試した結果、元のMEのテーブルを、--default-character-set=latin1でダンプし、テキストエディタでそのSQL内latin1をutf8に変更してから、mysqlに戻すという、(手順編) に書いた方法でうまくいきました。

ひとつ懸念事項があって、初めから日本語版をインストールしてSK2をいれたWordPressのSK2関連テーブル(sk2_blacklist, wp_sk2_logs, wp_sk2_spams)のDEFAULT CHARSETはlatin1ですが、今回ME→日本語版は全てSK2関連テーブルもutf8にしました。これはどちらが良いのかわかりませんが、これらのテーブルにも日本語は入っているのでutf8の方が良いのではないかと思っています。プラグインのテーブルなので、まずいようだったらSK2を無効化して関連テーブルを削除してから、SK2を再インストールすれば良いと思っています。

以上

(*1)
後から、MySQL 5.1 リファレンスマニュアル を詳しくみると、一度カラムのタイプをBLOBにしてからCONVERT TOで文字セットを変更し、カラムタイプを元に戻すという方法がかかれていた。でも大変そう。

おまけ

さて、今回の移行作業は事前にネットで調べてみた感触とは大きく異なり、予想外に苦戦したわけですが、世間ではなぜにうまくさくっと移行できているのか?もう一度ネットを検索したりしてその理由を考えてみました。

きっと、環境によるところが多いのでしょうね。私のとった手段もあっているかどうかわからないし。

(*2) ‘08.12.1追記

ぶっちろぐさまから、ぶっちろぐさまのサイトではME時代からDB_CHARSETは入っていて、DB上の漢字コードもUTF8だったとご連絡を頂きました。ありがとうございました。

調べてみたところ、ME2.1.3のwp-config-sapmle.phpには、DB_CHARSET, DB_COLLATE は無かったのですが、ME2.2.3のwp-config-sample.phpにはありました。当サイトでME2.1.3→ME2.2.3移行時にME2.1.3のwp-config.phpをそのまま使ったものと思われます。大変失礼いたしました。

この文字化けの問題は、本来ME2.1.3→ME2.2.3移行時に起こるものなのかもしれません。

Comments

2 Responses to “WordPress ME2.2.3 から日本語版2.5.1へ移行(文字化け対処編)”

  1. ぶっちろぐ on 2008/11/29 土曜日 21:16:26

    初めまして。
    Referer 覗いていたら「例」となって私の Weblog がリンクされていたので書込してみます。

    define(‘DB_CHARSET’, ‘utf8′);

    この記載が無いとのことですが、当方の WP では ME 時代からこの記述をしておりました。
    DB 上でも UTF8 です。これによりなんら問題無く移行は行えました。
    現在も ME を使っていた conf を使用していますがなんら問題無く稼働しております。

  2. Imai on 2008/12/1 月曜日 10:28:25

    ぶっちろぐ さま

    はじめまして。コメントありがとうございます。

    記事投稿時、同様のサイトがいくつかあったのですが、ぶっちろぐさまのサイトがわかりやすかったので、参照させていただきました。
    調べてみた結果は本文に追記した通りです。良くない例として間違って参照してしまい、申し訳ありませんでした。

    もう一箇所参照させていただいているサイトでも、ME2.2→日本語版2.5時に DB_CHARSETが増えたとの記述もあり、当方でもそのように見えたので、ME2.2にはDB_CHARSETは無かったと思い込んでいました。

    本文中はリンクに取り消し線をつけましたが、他人のサイトのリンクに取り消し線をつけるのはちょっと申し訳ない気もしています。もし、リンクそのものを削除等、他の方法がよろしければ、お手数でが再度ご連絡下さい。

Leave a Reply