京和様、

根岸です
申し訳ありません。環境の記述を忘れておりました。CentOSで運用しております。
ご返答ありがとうございました。

さて、京和様のご指摘があってからTime.parseあたりの挙動を見ていたのですが、1901-12-14 05:45:52以前の値が正確に取れないことに行き当たりました。
この辺は符号付き32bit整数をTimeに用いているための仕様に見えます。
なので、結局該当カラムのデフォルト値を'1902-01-01 00:00:00'とすることで解決いたしました。


--
根岸義輝

07/07/13 に 京和 崇行 < kyowa_t@kakaku.com> さんは書きました:
京和と申します。

RailsやOSなどの環境を記載されていないので詳細は不明ですが、
Windowsであればデフォルト値を
"0000-00-00 00:00:00"から"0000-00-00 9:00:00"
へ変更すれば動作するのではないかと思います。

この現象はRailsではなくWindows版RubyのTime型の取り扱いに起因していたと思います。
GMTに関するところですね。

参考になれば幸いです。

2007/07/13 14:35, Yoshiteru Negishi wrote:
> 根岸と申します。
> 初めて質問させていただきます。
>
> 弊社ではシステムのRailsによる置き換えを先日より行っています。その過程
> で、社内で解決できない問題が出てしまったので是非ともご教示ください。
>
> 弊社のシステムではMySQLを選択し、一部のDateTime型のカラムではデフォルト
> 値に"0000-00-00 00:00:00"が入っています。
> そう言ったテーブルに対し、そのDateTime型のカラム以外のカラムを指定して
> INSERTをかけると、Railsがそのカラムに対してNULLをインサートしようとして
> エラーがでてしまいます。
> テーブル構造をなるべく変えずにこの問題を解決する手法をご教示いただけます
> でしょうか。
>
> 以下が詳細です。(テーブル名などはアテです)
>
> テーブル構造
> +------------+------------------+------+-----+---------------------+----------------+
>
> | Field      | Type             | Null | Key | Default             |
> Extra          |
> +------------+------------------+------+-----+---------------------+----------------+
>
> | ID         | int(10) unsigned |      | PRI | NULL                |
> auto_increment |
> | UserID     | int(10) unsigned |      |     | 0                   |
>            |
> | EnterDate  | datetime         |      |     | 0000-00-00 00:00:00 |
>            |
> | AcceptDate | datetime         |      |     | 0000-00-00 00:00:00 |
>            |
> +------------+------------------+------+-----+---------------------+----------------+
>
>
>
> Railsのコード
>     Table.create(
>       :UserID => id,
>       :EnterDate => Time.now
>     )
>
> 発行されるSQL
> INSERT INTO Table (`UserID`, `EnterDate`, `AcceptDate`) VALUES(0,
> '2007-07-13 14:11:08', NULL)
>


--
ML: rails@ruby.ml.fdiary.net
使い方: http://QuickML.com/