MySQL
default
datetime
Timestamp
DDL

【MySQL5.6.5以前】DATETIME型だと初期値、更新値にDEFAULT CURRENT_TIMESTAMPを設定できない

現象

MySqlでDDL発行しようとしたら構文エラーでテーブル生成に失敗した。
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

原因

MySqlのバージョンが5.6.5以前のため、DATETIME型がCURRENT_TIMESTAMPに対応していなかった。
公式ドキュメントにも記述あり。
https://dev.mysql.com/doc/refman/5.6/ja/timestamp-initialization.html

対応

MySqlのバージョンを上げる

業務で使用するシステムの場合、対応は非常に困難。
※古いシステムを改修し続けている場合、良くある。

TIMESTAMP型に作り変える

updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
公式ドキュメントを参照/確認の上、アプリ側の処理に影響がなければ問題なし。
https://dev.mysql.com/doc/refman/5.6/ja/datetime.html