rauru-block.org は MySQL 4.1 で動いていますが、XREA みたいに MySQL 4.0 が EUC の設定で動いているレンタルサーバの場合、文字コードを UTF-8 にして WordPress を動かすと、記事の検索がうまくいかないことがあるようです。それも、常にうまくいかないわけではなく、うまくいったり失敗したりする。
この現象の原因について私は、EUCとUTF-8のバイト境界の齟齬のためだと推測しています。EUC は2バイト境界、UTF-8 は日本語の場合3バイト境界です。そうすると
| binary | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| EUC | 1文字目 | 2文字目 | 3文字目 | |||
| UTF-8 | 1文字目 | 2文字目 | ||||
と、文字の位置によって文字境界がズレてパックされるため、運が良ければきれいにマッチしますが、運が悪いとだめだめなことになる。ということなんじゃないかなあ多分。と思って先日2chのWordPressスレにも書いたんですが。
この問題を解決するには、posts テーブルの post_content フィールドとかあの辺が binary になっていれば良いのではないかと。いやもちろんその場合でもバイトずれの危険はあるわけですが、まあ UTF-8 ならバイトずれの発生率はかなり小さいだろうと。
一度 WordPress インストールしてしまった後で alter table するのはいろいろとアレな気がするので、インストールスクリプトをいじくって、インストール時に binary で create table されるようにするのがいいんでしょうなあ。wp-admin/upgrade-schema.php かな?
しかし私の近辺には MySQL 4.0 系のサーバが無いので、これでうまくいくかどうか検証できんのですよ。


July 21st, 2005 at 10:09
これって XOOPS とかも同じ話?