Question

Je suis en train d'utiliser Sequel pour accéder à une base de données MySQL en Ruby. Lorsque je tente d'accéder à un tableau qui implique une colonne de date, je suis présenté avec une erreur. Quand j'accéder à une table sans, il fonctionne très bien. Quel est le problème?

Exemple de code:

require 'rubygems'
require 'sequel'

DB = Sequel.connect(:adapter=>'mysql', :host=>'localhost', :database=>'db', :user=>'user', :password=>'password')

event = DB[:table]

puts event.all

Erreur:

/usr/lib/ruby/1.8/date.rb:956:in `new_by_frags': ArgumentError: invalid date (Sequel::InvalidValue)

L'erreur n'apparaît pas lorsqu'une table qui ne dispose pas d'une date est accessible. Cela fonctionne sur Debian.

Était-ce utile?

La solution

J'ai eu le même problème. Elle a été causée par Sequel étouffement à la date zéro de MySQL 0000-00-00. La solution j'était de mettre

Sequel::MySQL.convert_invalid_date_time = nil

(qui se trouve ici: http://groups.google.com/ groupe / suite-talk / browse_thread / fil / 152a4131bd280966 ).

Si vous contrôlez le DB, vous pouvez également empêcher MySQL stockage zéro dates à l'aide du NO_ZERO_DATE en mode SQL: http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode_no_zero_date .

Autres conseils

L'Enjeu:

Sequel::MySQL.convert_invalid_date_time = nil

ne fonctionne plus, mais je fixai ce même problème en réglant l'option sur mon objet DB:

DB = Sequel.connect("mysql://localhost/#{DB_NAME}")
DB.convert_invalid_date_time = nil

Espérons que cela aide quelqu'un d'autre!

La solution finale implique le passage à utiliser le data_objects bijou Ruby. Cela évite les problèmes en utilisant le pilote natif MySQL C.

Le code est ajusté comme suit:

require 'rubygems'
require 'sequel'

# connect to the db
DB = Sequel.connect('do:mysql://user:pass@localhost/database')

Peut-être cela pourrait causer des problèmes de performance, mais cela dépasse le cadre de ma question initiale.

Merci à Lexu pour commenter la question initiale.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top