続編で日付を伴う出力MySQLテーブルにできません。
質問
私はRubyでMySQLデータベースにアクセスするために続編を使用しようとしています。私は、日付列を伴うテーブルにアクセスしようとすると、私はエラーを提示しています。私はせずに、テーブルにアクセスすると、それが正常に機能します。何が間違っているのですか?
コード例:
require 'rubygems'
require 'sequel'
DB = Sequel.connect(:adapter=>'mysql', :host=>'localhost', :database=>'db', :user=>'user', :password=>'password')
event = DB[:table]
puts event.all
エラー:
/usr/lib/ruby/1.8/date.rb:956:in `new_by_frags': ArgumentError: invalid date (Sequel::InvalidValue)
エラーが日付を備えていないテーブルがアクセスされたときには示されていません。これは、Debian上で実行されます。
解決
私は同じ問題を抱えていました。これは、MySQLのゼロ日付「0000-00-00」をのどに詰まら続編によって引き起こされました。私が使用した溶液は、
に設定しましたSequel::MySQL.convert_invalid_date_time = nil
(ここで見つける: http://groups.google.com/グループ/続編トーク/ browse_thread /スレッド/ 152a4131bd280966 に)。
あなたがDBをコントロールしている場合、あなたはまた、MySQLはNO_ZERO_DATE SQLモードを使用してゼロの日付を格納防ぐことができます:<のhref = "http://dev.mysql.com/doc/refman/5.1/en/server-sql- mode.html#sqlmode_no_zero_date」のrel = ">" nofollowをhttp://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode_no_zero_dateするます。
他のヒント
率います:
Sequel::MySQL.convert_invalid_date_time = nil
はもはや機能していないが、私はちょうど私のDBオブジェクトのオプションを設定することで、これと同じ問題を修正します:
DB = Sequel.connect("mysql://localhost/#{DB_NAME}")
DB.convert_invalid_date_time = nil
これは他の誰かに役立ちます願っています!
最終的な解決策はdata_objects Rubyの宝石を使用するように切り替える関与しました。これは、ネイティブC MySQLドライバを使用して問題を避けています。
次のようにのコードを調整する
require 'rubygems'
require 'sequel'
# connect to the db
DB = Sequel.connect('do:mysql://user:pass@localhost/database')
おそらくこれは、パフォーマンスの問題を引き起こす可能性があるが、これは私の最初の問題の範囲を超えてます。
元の質問にコメントするためにlexuするのおかげで。の