さくらインターネットで MySQL の 5.1 が利用できるようになったので、切り替えてみました。既存のデータベースを削除しなければならないので、いったんデータをバックアップしなければならないのが面倒でしたが、移行作業はそれほど手間ではありませんでした(容量が大きかったので、phpMyAdmin からインポートできず、エクスポートしたデータをサーバにアップロードした後、SSH でサーバに接続し、そこから MySQL サーバに接続、mysql コマンドでインポートしたことくらい)。
作業は順調に進んだように見えたのですが、実際に動かしてみるとうまくいきません。日本語を含むキーワードを入れると、データベースのエラーが出ます。この症状は、4.0系から4.1系以上に上げるときによく起こる現象で、PHP に組み込まれている MySQL のライブラリのキャラクターセットと MySQL サーバの設定が一致していないことが原因。
対処方法としては、PHP の再コンパイル(これはかなり面倒)か、MySQL の設定ファイル my.ini に
skip-character-set-client-handshakeを追加することなのですが、レンタルサーバではどちらも不可能です。
この場合、
SET NAMES utf8を MySQL 接続後に実行することで回避することができますが、この方法にはセキュリティ上の問題が指摘されており、危険性を把握した上でご利用ください。
PEAR の MDB2 を利用している場合、DSN の設定時に
'option' => 'charset=utf8'を指定することで、PHP 側の MySQL の文字コードを変更することができるので、上記の問題を回避することができます。