Ruby1.9.1(ms-win32)でMySQLは使えるのか

Rails2.2を試すにあたって、データベースはデフォルトのsqlite3でも良いのだが、どうせなら実績の多いMySQLを使いたいなと思って調べてみた。

MySQL用のアダプタは、とみたまさのり氏が開発しており、以下のように二通りの実装が存在している。

それぞれ、Rubyだけで書かれたもの(JDBCで言えばType4 ThinDriver)と、Ruby用拡張ライブラリィとしてCで書かれたものだ。
Cで書かれたものは、基本的には使用する環境でビルドする必要がある。gemを使ってバイナリも取れるが、現在ダウンロードできるバージョン2.7.3はRuby1.8用にビルドされたものであり、恐らくRuby1.9では使用できない。

ビルドはWindows環境では敷居が高いので、まずはRubyで書かれたものをインストールしてみた。導入は非常に簡単で、ダウンロードしたアーカイブを展開後、インストールするだけである。

#ruby ./install.rb

これで、私の環境であれば$RUBY_HOME/lib/ruby/1.9.1/にmysql.rbがコピーされた使えるようになる。

試しに、同梱されているtest.rbを使って、MySQLに接続してみよう。

E:/ruby/ruby-mysql-0.2.6>ruby test.rb
connect.............E:/ruby/ruby-mysql-0.2.6/mysql.rb:1019:in `read': Packets out of order
: 0<>  (RuntimeError)
        from E:/ruby/ruby-mysql-0.2.6/mysql.rb:444:in `read'
        from E:/ruby/ruby-mysql-0.2.6/mysql.rb:110:in `real_connect'
        from E:/ruby/ruby-mysql-0.2.6/mysql.rb:91:in `initialize'
        from E:/ruby/ruby-mysql-0.2.6/mysql.rb:1085:in `new'
        from E:/ruby/ruby-mysql-0.2.6/mysql.rb:1085:in `real_connect'
        from E:/ruby/ruby-mysql-0.2.6/t/00connect.rb:1:in `'
        from test.rb:23:in `load'
        from test.rb:23:in `block in 
' from test.rb:19:in `each' from test.rb:19:in `
'

予想はしていたけど、Ruby版はやはり駄目のようだ。MySQL4.1以降で認証プロトコルが変更された以降は未対応らしい。

道としては、

Ruby/MySQLの5.x対応を待つ
・拡張ライブラリィ版の方は自分でビルドしてみる

このどちらかしかないか。