1

Ruby1.8.7でmysql20.3.11を使用してRails3.2.2を使用しています(mysql 14.14サーバーに対して)。orcreated_atupdated_atが無効なDateTimeになることがあり、アプリでメッセージ付きの例外がスローされます"Invalid date: 2022-03-00 00:00:00"

created_atと列を明示的に作成、設定、読み取り、または実行しているわけではありませんupdated_at

mysqlクライアントを介してテーブルを検査すると、ほとんどの場合、これらの各列の値は「 0000-00-00 00:00:00」であり、最終的nilにはRailsのようになります。ただし、いくつかの行には「」などの値が表示されます2022-03-00 00:00:00(私が知る限り、これらはすべて2022年のものですが)。

.destroy()興味深いことに、 Railsはオブジェクトを作成できないため、Railsから実行することさえできません。

それらの列に無効な日付を設定している可能性はありますか?

編集:これはすべてのテーブルで発生しています。これが私のschema.rbであり、テーブルの1つに対するすべての移行です:https ://gist.github.com/2930655

Edit2:私は自分で解決しました(以下の私の答えを参照)が、それがバグであるかどうか、もしそうなら、バグがどのパッケージに含まれているか(ActiveRecord?)を検討していただければ幸いです。

4

1 に答える 1

0

これは、私がオーバーロードしたために発生していたことが判明し、Time#to_s無効な値が SQL で送信されました (DateTime の HH:MM:SS を送信していました)。

MySQL と SQLite はどちらもこの形式の DateTime の解析に失敗し、値がガベージになりますが、Ruby によれば SQLite の値は決して「無効」ではないため、開発中にこれに気付くことはありませんでした。

ここで、別の列に Time または DateTime を持つオブジェクトを保存し、それを Time/DateTime オブジェクトに設定すると、正しく設定されるので、これはバグだと言いたくなるでしょう。

于 2012-06-14T15:07:03.000 に答える