2

私は MySQL (完璧な人はいません) バージョン 4.1 を使用しており、次のようなタイムスタンプ列を定義するのに慣れています。

ALTER TABLE foo ADD creation TIMESTAMP DEFAULT NOW() ;

まったく同じことをしたいのですが、DATE フィールドの場合です。その理由は、TIMESTAMP の精度は必要なく、MySQL には関数インデックスが存在しないため、(時刻に関係なく) 特定の日付の行にすばやくアクセスできないからです。だから私は次のことを試しましたが、うまくいきません:

ALTER TABLE foo ADD creation_date DATE DEFAULT CURDATE() ;
ERROR 1067 (42000): Invalid default value for 'creation_date'

あるいは

ALTER TABLE foo ADD creation_date DATE DEFAULT DATE(NOW()) ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(now())' at line 1

どちらも機能しません。

何か案は?

4

1 に答える 1

4

MySQL では、デフォルト値は定数でなければなりません。関数または式は使用できません。

例外は、CURRENT_TIMESTAMP が有効な非定数デフォルト値である TIMESTAMP 型です。

4.1 マニュアルを参照してください: データ型のデフォルト値

于 2009-07-29T09:29:26.787 に答える