cakephpとmysqlのdatetimeについて。

cakephpアプリではテーブルにdatetime型の「created」「modified」というフィールドを作っておくと初期値に何の指定がなくても自動的にデータ挿入時刻と更新時刻がそれぞれ設定されるという認識でした。ローカル環境ではそれが正常に機能していました。

ところがレンタルサーバーに環境を移すと機能しなくなりました。レンタルサーバーのmysqlのバージョンのせいかもしれません。mysqlのバージョンをphpinfo()で確認したところ4.0でした(ローカルでは5.0)。

具体的な現象です。まずdatetime型のフィールドの初期値が勝手に「0000-00-00 00:00:00」となっていること(ローカル環境では何も設定されていなかった)。またすべてのデータで「created」にも「modified」にもこの初期値である「0000-00-00 00:00:00」が設定されてしまうことです。レンタルサーバーの環境でもローカル環境のように自動でデータ更新時刻が設定されてほしいのです

回答の条件
  • 1人5回まで
  • 登録:2008/10/29 11:08:30
  • 終了:2008/11/05 11:10:02

回答(2件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/10/29 11:27:46

ポイント35pt

まずdatetime型のフィールドの初期値が勝手に「0000-00-00 00:00:00」となっていること

確認ですが、レンタルサーバ側のテーブルの datetime型のフィールドについて、NULLを許可しており、default値がNULLになるように create していますか?

id:dedara

NULLは許可していません。createというのはcreate tableのことでしょうか。create table時にはdefault値は設定してないです。nullを許可してないのでdefault値はnullにもできないですね。


「初期値が勝手に「0000-00-00 00:00:00」となる」と書いたのはローカル環境だとdatetimeの初期値「設定なし」が可能だったからです。レンサバで設定なしにすると勝手に「0000-00-00 00:00:00」の値が入ります

2008/10/29 12:26:55
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332008/10/29 13:43:57

ポイント35pt

#1のコメント:

createというのはcreate tableのことでしょうか。

はい、そうです。


ブログデータベースの作成」の中で、created と modified は default NULL になっているので、こうした方がいいのかなと考えました。

ただ、「created と modified」では、updated のみ NULL にするような表記がなされていますね。

id:dedara

createdとmodifiedのフィールドの初期値をNULLにしてみましたが一緒で「0000-00-00 00:00:00」になります。


それから今気付いたのですがNOT NULLのときも初期値NULLのときも「modified」については更新時に更新時刻が入っていました。なので問題はデータInsert時の「created」だけでした。

2008/10/29 14:40:18

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • CakePHPで現在時刻をDBに簡単に書き込む BLOGΣ(゜Д゜)カッ! 2010-06-29 06:44:39
    ★月々263円からオンラインショップを運営! 高機能カート・クレジット決済が簡単導入 ケーキ屋さん目指して爆笑中のマスタカです。 DBに現在時刻を書き込もうとしました。 now()で
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません