表 T 有这个字段
+---------------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+-------------------+-----------------------------+
| updated | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+---------------+--------------+------+-----+-------------------+-----------------------------+
在 MySQL 5.7 中,更新记录和设置updated=null
会自动设置updated
为当前日期时间
UPDATE T SET ...,updated=null WHERE k=123
==>
+---------------------+
| updated |
+---------------------+
| 2022-01-05 22:52:05 |
+---------------------+
但是在 MySQL 8.0 中做同样的事情,给出
+---------------------+
| updated |
+---------------------+
| 0000-00-00 00:00:00 |
+---------------------+
我该如何解决这个问题,这是 MySQL 错误,还是新设置(或行为改变)?
可能迟到了,但你在正确的轨道上
explicit_defaults_for_timestamp
。关键事实是该变量在 8.0 版本中默认为ON
,但在 v.5.7 中默认为 OFF。