1

我在 Ruby 1.8.7 上使用 Rails 3.2.2 和 mysql2 0.3.11(针对 mysql 14.14 服务器),有时 a created_atorupdated_at值将是无效的 DateTime,并导致我的应用程序抛出带有消息的异常"Invalid date: 2022-03-00 00:00:00"

我没有明确地创建、设置、阅读或对created_atandupdated_at列做任何事情。

通过mysql客户端检查表,在大多数情况下,这些列中的每一列的值都是“ 0000-00-00 00:00:00”,最终与nilRails 中一样。但是,有几行显示诸如“ 2022-03-00 00:00:00”之类的值(尽管据我所知,它们都是不同的,但都在 2022 年)。

有趣的是,我什至不能.destroy()从 Rails 运行,因为它不能创建对象。

什么可能会为这些列设置无效日期?

编辑:所有表都发生这种情况。这是我的 schema.rb,以及其中一张表的所有迁移:https ://gist.github.com/2930655

Edit2:我自己解决了它(请参阅下面的答案),但如果你能权衡它是否是一个错误,如果是这样,这个错误与哪个包(ActiveRecord?)有关。

4

1 回答 1

0

事实证明,这是因为我超载了Time#to_s,导致在 SQL 中发送无效值(它为 DateTimes 发送 HH:MM:SS)。

MySQL 和 SQLite 都无法以这种格式解析 DateTimes,并导致垃圾值,但是,根据 Ruby,SQLite 的值永远不会“无效”,所以我在开发过程中从未注意到这一点。

现在,当我在另一列中保存具有 Time 或 DateTime 的对象并将其设置为 Time/DateTime 对象时,它已正确设置,因此我倾向于说这是一个错误。

于 2012-06-14T15:07:03.000 回答