質問

私は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する

のおかげで。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top