勉強の為にMySQLでいろいろテーブルを作成していた時の足跡。
DATETIMEにデフォルトでNULLを入れるとエラーが出ました。
エラー
#1067 – Invalid default value for ‘created’
実行した SQL:
ALTER TABLE `comments` ADD `body` TEXT NOT NULL ,
ADD `post_id` INT NOT NULL ,
ADD `created` DATETIME NOT NULL DEFAULT NULL ,
ADD `modified` DATETIME NOT NULL DEFAULT NULL
そこでDATETIME型からTIMESTAMP型に変更しました。
比較すると
TIMESTAMP
- TIMESTAMP型で使える範囲:1970年 〜 2037年
- 4 バイト使う
- デフォルトで更新時刻をインサートすることができる
DATETIME
- DATETIME型で使える範囲:1000年 〜 9999年
- 8 バイト使う
- デフォルト値は固定値じゃないとダメ
以下のように、TIMESTAMPにデフォルト値CURRENT_TIMESTAMPを設定します。
ALTER TABLE `comments` ADD `body` TEXT NOT NULL ,
ADD `post_id` INT NOT NULL ,
ADD `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
ADD `modified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
意図した通りデータをインサートした時に、createdフィールドとmodifiedフィールドへ現在時刻が挿入されました。