2009年05月09日

MySQL を 5.1 にアップグレード

 さくらインターネットで 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 の文字コードを変更することができるので、上記の問題を回避することができます。

参考リンク

posted by まいける at 22:21 | Comment(0) | TrackBack(0) | MySQL

2008年08月31日

気づかなかったこと

 Trend Antenna では、文字コードを UTF-8 にしているのですが、さくらのレンタルサーバで使っている MySQL(4.0.27)では、character set に utf8 を使用できないことに今日初めて気づきました…。MySQL の Unicode サポートって、4.1 からだったんですね。

 別のスクリプトを書いていて LIKE の結果が期待通りにならなかったので、しばらく悩んでいたのですが、
# レコードは存在するのに
# SELECT * FROM some_table WHERE some_column LIKE '%学%';
# の結果が NULL になる
文字コードを EUC-JP(MySQL 風にいうと ujis)に変えたら無事解決。ということは、Trend Antenna でも同様の問題が起こっている可能性がありそうですが、特定の文字列の場合に限定されそうなので、修正はペンディング。API との連携などを考えると、UTF-8 のほうが便利なんですよねぇ…。
posted by まいける at 23:03 | Comment(0) | TrackBack(0) | MySQL

2008年07月06日

MySQL

 さくらインターネットの MySQL ですが、以前にも書いたようにバージョンが 4.0.27 です。また、データベースエンジンに InnoDB を選択できないので、トランザクションの機能は利用できません。

 PHP などから MySQL を使用する際に気をつけるのは、データベースサーバとWebサーバが別であること。DSN を作成する際には、ホスト名は localhost でなく、mysqlxx.db.sakura.ne.jp(xxは数字)となるので、他からスクリプトを移植して使用する際には注意が必要です。
posted by まいける at 00:19 | Comment(0) | TrackBack(0) | MySQL