mysql报错解决 `1525 - Incorrect DATETIME value: ‘0000-00-00 00:00:00‘`

你遇到的错误 1525 - Incorrect DATETIME value: '0000-00-00 00:00:00' 说明数据库启用了严格模式(sql_mode 包含了 NO_ZERO_DATE),并且 '0000-00-00 00:00:00' 作为无效的日期不被允许。

解决方案

  1. 查看当前的 SQL 模式

你可以通过以下查询查看当前的 sql_mode 设置,看看是否包含了 NO_ZERO_DATE

sql 复制代码
SELECT @@sql_mode;

如果返回的 sql_mode 包含 NO_ZERO_DATE,则会拒绝 '0000-00-00 00:00:00' 这种无效日期。

  1. 禁用 NO_ZERO_DATE 模式(临时修改):

如果你希望临时绕过这个问题,可以通过禁用 NO_ZERO_DATE 来允许使用 '0000-00-00 00:00:00'。使用以下 SQL 语句:

sql 复制代码
SET SESSION sql_mode = REPLACE(@@sql_mode, 'NO_ZERO_DATE', '');

然后,再执行你的查询:

sql 复制代码
SELECT * FROM rr_main WHERE UPDATE_TIME = '0000-00-00 00:00:00';

注意: 这个修改只会在当前会话中生效,当 MySQL 服务重启后会恢复默认设置。

  1. 使用 IS NULL 查找(如果 0000-00-00 00:00:00 被视作空值)

在某些情况下,如果数据库强制插入无效日期,'0000-00-00 00:00:00' 可能被处理为 NULL,你可以尝试通过 IS NULL 查找:

sql 复制代码
SELECT * FROM rr_main WHERE UPDATE_TIME IS NULL;
  1. 永久禁用 NO_ZERO_DATE(修改 MySQL 配置):

如果你希望永久禁用 NO_ZERO_DATE,可以编辑 MySQL 配置文件 my.cnfmy.ini,在 [mysqld] 部分添加如下配置:

ini 复制代码
sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

然后重启 MySQL 服务。

  1. 替换无效的 0000-00-00 00:00:00

如果你知道表中存在 0000-00-00 00:00:00 作为无效日期的记录,可以直接用合法的日期值进行替换,例如:

sql 复制代码
UPDATE rr_main
SET UPDATE_TIME = NOW()
WHERE UPDATE_TIME = '0000-00-00 00:00:00';

这将把所有 UPDATE_TIME'0000-00-00 00:00:00' 的记录更新为当前时间。

总结:

  • 如果 NO_ZERO_DATE 被启用,会导致 '0000-00-00 00:00:00' 作为无效日期值出现错误。
  • 可以临时禁用 NO_ZERO_DATE,或者修改查询逻辑查找 NULL 值。
  • 永久解决方案是调整 sql_mode 配置或者替换表中的无效日期值。

a. 如果你希望进一步了解如何更改 MySQL 的配置或如何使用其他查询方式来解决问题,请告诉我。

相关推荐
jiayou643 小时前
KingbaseES 实战:审计追踪配置与运维实践
数据库
随风飘的云3 小时前
mysql的innodb引擎对可重复读做了那些优化,可以避免幻读
mysql
二流小码农4 小时前
鸿蒙开发:上传一张参考图片便可实现页面功能
android·ios·harmonyos
鹏程十八少5 小时前
4.Android 30分钟手写一个简单版shadow, 从零理解shadow插件化零反射插件化原理
android·前端·面试
Kapaseker5 小时前
一杯美式搞定 Kotlin 空安全
android·kotlin
三少爷的鞋6 小时前
Android 协程时代,Handler 应该退休了吗?
android
NineData14 小时前
NineData 迁移评估功能正式上线
数据库·dba
火柴就是我19 小时前
让我们实现一个更好看的内部阴影按钮
android·flutter
NineData20 小时前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算
赵渝强老师1 天前
【赵渝强老师】PostgreSQL中表的碎片
数据库·postgresql