在MySQL 5.6.6之前,TIMESTAMP列如果没有明确声明NULL属性,默认为NOT NULL,设置TIMESTAMP的列值为NULL,会自动存储为当前timestamp。
表中的第一个TIMESTAMP列,如果没有声明NULL属性、DEFAULT或者 ON UPDATE,会自动分配 DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP 属性。
表中第二个TIMESTAMP列,如果没有声明为NULL或者DEFAULT子句,插入行时没有指明改列的值,该列默认分配0000-00-00 00:00:00且没有警告。
来看一个例子:
环境:
重启MySQL后错误消失,这时TIMESTAMP的行为如下:
TIMESTAMP如果没有显示声明NOT NULL,是允许NULL值的,可以直接设置改列为NULL,而没有默认填充行为,TIMESTAMP不会默认分配DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP属性。
测试环境:
测试过程: