tanamonの稀に良く書く日記

KEEP CALM AND DRINK BEER

Ruby/DBIでMySQLドライバを使うとSegmentation faultになる

test.rb

require 'dbi'

db = DBI.connect('DBI:Mysql:test:localhost', 'root', 'root')

10000.times do |c|
  s = '.' * c * 10
end

db.disconnect

このコードを実行するとSegmentation faultでRubyが終了する。

実行結果

C:\work>ruby test.rb
test.rb:7: [BUG] Segmentation fault
ruby 1.8.6 (2008-08-11) [i386-mswin32]


This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

DBI.connectをコメント化すると正常に処理完了するので、どうもこの部分があやしい。


さて、どうしよう。


追記:
DBをSQLite3に変えてみたらちゃんと動いた。やっぱりMySQLドライバのバグっぽい。

SQLite3版

require 'dbi'

db = DBI.connect('DBI:SQLite3:test.db')

10000.times do |c|
  s = '.' * c * 10
end

db.disconnect


さらに追記:
MySQL 5.1.30の他に6.0.8 alphaでも試したけどダメだった。


さらにさらに追記:
結局、ODBC経由で接続するようにして回避した。