下林明正のブログ

個人的かつ雑多なブログです。

MySQLのTIMESTAMP型の罠

MySQL :: MySQL 5.1 リファレンスマニュアル (オンラインヘルプ) :: 6.3.1.1 TIMESTAMP の特性

TIMESTAMP カラムはデフォルトで NOT NULL になっているため、NULL 値を含めることはできません。NULL を指定すると、現在のタイプスタンプが割り当てられます。ただし、NULL 属性を使って TIMESTAMP カラムを宣言することで、そのカラムに NULL を含めることができます。この場合、異なるデフォルト値を指定する DEFAULT 節で上書きされないかぎり、デフォルト値も NULL になります。DEFAULT NULL を使用すると、デフォルト値として NULL を明示的に指定できます。(TIMESTAMP カラムが NULL 属性を使って宣言されていない場合、DEFAULT NULL は無効になります。)TIMESTAMP カラムが NULL 値を許可する場合、NULL を指定すると、カラムには現在のタイムスタンプではなく NULL が設定されます。

デフォルトでNOT NULLであり、仮にNULLを格納しようとすると暗黙の内に現在時刻が格納されてしまう。 明示的にNULLを許諾することで、この挙動を回避することができる。

知ってる人は知っている常識なんだろうけど、正直に言うとハマった。