这种行为并不像看起来那样令人毛骨悚然。
此外,您可以通过为其分配一个值来将任何TIMESTAMP 列初始化或更新为当前日期和时间NULL
,除非它已使用NULL
允许NULL
值的属性进行定义。
通过从 a TIMESTAMP
that is中删除默认的“0” NOT NULL
,您将插入当前时间戳而不是全零占位符。
据推测,您的插入是在列列表中按名称指定该时间戳列,并且您在其中显式插入一个NULL
,仅触发一个未完全配置为任何人预期的列上的记录行为。所以,不,不要使用这个。
我说“大概”是因为如果我没有明确列出该列,我会得到:
mysql> show warnings;
+---------+------+------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------+
| Warning | 1364 | Field 'ts2' doesn't have a default value |
+---------+------+------------------------------------------+
1 row in set (0.00 sec)
...并且我的 NOT NULL(无默认值)第二个时间戳初始化为全 0 的值。
如果您不这样做,那么我很想知道您的特定 MySQL 服务器版本。
不过,无论如何,如果您需要更灵活的时间戳,请升级到 MySQL 5.6。取消了对每个表单个自动时间戳列的限制,并且时间戳列还支持可选的毫秒和微秒粒度。