A tabela T tem este campo
+---------------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+-------------------+-----------------------------+
| updated | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+---------------+--------------+------+-----+-------------------+-----------------------------+
No MySQL 5.7, fazer uma atualização de um registro e configuração updated=null
era definir automaticamente updated
a data e hora atual
UPDATE T SET ...,updated=null WHERE k=123
==>
+---------------------+
| updated |
+---------------------+
| 2022-01-05 22:52:05 |
+---------------------+
Mas fazer o mesmo no MySQL 8.0, dá
+---------------------+
| updated |
+---------------------+
| 0000-00-00 00:00:00 |
+---------------------+
Como posso corrigir isso, isso é um bug do MySQL ou uma nova configuração (ou uma mudança de comportamento)?
Provavelmente atrasado, mas você estava no caminho certo com
explicit_defaults_for_timestamp
. O fato chave é que esta variável é padronizadaON
na versão 8.0 , mas padronizada para OFF na v.5.7 .