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」が設定されてしまうことです。レンタルサーバーの環境でもローカル環境のように自動でデータ更新時刻が設定されてほしいのです
まずdatetime型のフィールドの初期値が勝手に「0000-00-00 00:00:00」となっていること
確認ですが、レンタルサーバ側のテーブルの datetime型のフィールドについて、NULLを許可しており、default値がNULLになるように create していますか?
#1のコメント:
createというのはcreate tableのことでしょうか。
はい、そうです。
「ブログデータベースの作成」の中で、created と modified は default NULL になっているので、こうした方がいいのかなと考えました。
ただ、「created と modified」では、updated のみ NULL にするような表記がなされていますね。
createdとmodifiedのフィールドの初期値をNULLにしてみましたが一緒で「0000-00-00 00:00:00」になります。
それから今気付いたのですがNOT NULLのときも初期値NULLのときも「modified」については更新時に更新時刻が入っていました。なので問題はデータInsert時の「created」だけでした。
NULLは許可していません。createというのはcreate tableのことでしょうか。create table時にはdefault値は設定してないです。nullを許可してないのでdefault値はnullにもできないですね。
「初期値が勝手に「0000-00-00 00:00:00」となる」と書いたのはローカル環境だとdatetimeの初期値「設定なし」が可能だったからです。レンサバで設定なしにすると勝手に「0000-00-00 00:00:00」の値が入ります