— 临时关闭严格模式
SET SESSION sql_mode=”;
— 更新 add_date 为 NULL
UPDATE test
SET add_date = NULL
WHERE CAST(add_date AS CHAR) = ‘0000-00-00 00:00:00′;
— 可选:恢复原严格模式
SET SESSION sql_mode=’STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION’;
注意:
MySQL 开启了 严格模式(STRICT mode + NO_ZERO_DATE)。
0000-00-00 00:00:00 被视为 非法 DATETIME,在严格模式下无法直接写入或匹配。
所以,普通 UPDATE 或 WHERE risk_verify_date = ‘0000-00-00 00:00:00’ 会失败。
原理:
CAST(risk_verify_date AS CHAR) 将 DATETIME 类型字段 临时转换为字符串。
这样 MySQL 不再严格检查日期合法性,而是把它当作普通字符串匹配。
匹配成功的行就可以安全更新为 NULL。
💡 重点:严格模式只对 DATETIME 写入有效值时生效,不会阻止字符串匹配操作。