1

我正在尝试使用 Sequel 访问 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 上运行的。

4

3 回答 3

3

小心:

Sequel::MySQL.convert_invalid_date_time = nil

不再有效,但我只是通过在我的数据库对象上设置选项来解决同样的问题:

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

希望这对其他人有帮助!

于 2012-02-20T04:50:23.770 回答
2

我有同样的问题。它是由 MySQL 的零日期“0000-00-00”上的 Sequel 窒息引起的。我使用的解决方案是设置

Sequel::MySQL.convert_invalid_date_time = nil

(在这里找到:http ://groups.google.com/group/sequel-talk/browse_thread/thread/152a4131bd280966 )。

如果您控制数据库,您还可以防止 MySQL 使用 NO_ZERO_DATE SQL 模式存储零日期:http: //dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode_no_zero_date

于 2010-10-07T10:07:42.180 回答
1

最终解决方案涉及切换到使用 data_objects Ruby gem。这避免了使用本机 C MySQL 驱动程序的问题。

代码调整如下:

require 'rubygems'
require 'sequel'

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

这可能会导致性能问题,但这超出了我最初问题的范围。

感谢 lexu 对原始问题的评论。

于 2009-11-04T13:12:23.693 回答