DATETIMEのDEFAULT

登録日時・更新日時を記録する場合、TIMESTAMP型かDATETIME型か、それとも…の続きです。
DATETIMEのデフォルト値としてどういう値をいれるべきか検討しました。




「DATETIME 型に DEFAULT 値で CURRENT_TIMESTAMP を指定するとエラーになってしまう」

DEFAULT 条項はカラムのデフォルト値を指定します。例外がひとつあります。デフォルト値は一定でなければいけませんので、それは関数や式にはなり得ません。これは例えば、日付カラムの値に NOW() や CURRENT_DATE のような関数の値をデフォルトとして設定する事はできないという意味です。例外として、TIMESTAMP カラムのデフォルトとして CURRENT_TIMESTAMP を指定する事ができます。詳しくは 項10.3.1.1. 「TIMESTAMP MySQL 4.1での性質」 を参照してください。


もしカラム定義が明示的な DEFAULT 値を含まない場合、MySQL はデフォルト値を 項10.1.4. 「データタイプデフォルト値」 のように規定します。


BLOB と TEXT カラムはデフォルト値として割り当てる事ができません。


MySQL 5.1 リファレンスマニュアル :: 12 SQL ステートメント構文 :: 12.1 データ定義ステートメント :: 12.1.8 CREATE TABLE 構文
 http://dev.mysql.com/doc/refman/5.1/ja/create-table.html

TIMESTAMP 以外の日付と時刻タイプのデフォルトには、「ゼロ」値が適切です。テーブルの最初の TIMESTAMP カラムのデフォルト値は現在の日付けと時刻です。項10.3. 「日付と時刻タイプ」を参照してください。


MySQL 5.1 リファレンスマニュアル :: 10 データタイプ :: 10.1 データタイプ概要 :: 10.1.4 データタイプデフォルト値
 http://dev.mysql.com/doc/refman/5.1/ja/data-type-defaults.html


なので、DATETIME型を使う限り、DEFAULT値はCURRENT_TIMESTAMPのような指定はできず、定数を指定せいよ、ということのようです。
……なんかTIMESTAMP型を使いたくなってきましたね(^^;


mysqlのtimestamp型を使って更新日時と生成日時の両方を記録する(いぞるで雑記annex)
 http://isoldeblog.blog93.fc2.com/blog-entry-14.html


▽データを入れた瞬間にその時間帯が自動的に入力されるTIMESTAMP型の動作
 http://q.hatena.ne.jp/1193632892



しかし初志貫徹でDATETIME型を使います。
以下の記事を参考に、レコード挿入時にCURRENT_TIMESTAMPで現在の時刻をセットするようにします。


MySQL の DATETIME と TIMESTAMPComments(集中力なら売り切れたよ)
 http://d.hatena.ne.jp/r_ikeda/20090410/datetime



しかしMySQLのマニュアルは読みにくいです。1ページに情報がたくさんあるし……。
PHPの方が具体的で、文章を読まずに仕様が把握できてわかりやすい気がします。
性格の違いもあるんでしょうね……。