You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 8.0.35报错1525:无效DATETIME值''的解决求助

解决MySQL 8.0.35查询时的Error Code: 1525错误

错误原因

你遇到的Error Code: 1525. Incorrect DATETIME value: '',核心原因如下:

  • ALLOW_INVALID_DATES SQL模式仅允许格式正确但逻辑无效的日期(比如2023-02-30这种格式合法但实际不存在的日期),但空字符串''完全不符合DATETIME类型的格式规范,因此该模式无法豁免这个错误。
  • MySQL 8.0默认SQL模式包含STRICT_TRANS_TABLES(严格模式),在严格模式下,对DATETIME类型字段使用空字符串进行比较会直接抛出错误,而非警告。

解决方案

方案1:修改查询语句,移除空字符串判断

空字符串本身不是DATETIME类型的合法值,合理的空值应该用NULL表示。如果业务逻辑允许,直接去掉ins.termination_date = ""这个条件:

SELECT ins.*, ic.* 
FROM insurance_data AS ins 
LEFT JOIN insurance_companies AS ic ON ins.provider = ic.id 
LEFT JOIN phone_numbers AS ph ON (ic.id = ph.foreign_id AND ph.type = 2) 
WHERE (ins.termination_date IS NULL OR ins.termination_date = "0000-00-00") 
  AND ins.provider IS NOT NULL 
  AND ins.provider > 0 
ORDER BY ins.date DESC LIMIT 1

方案2:调整SQL模式,关闭严格模式并允许零日期

临时调整会话级别的SQL模式(重启MySQL后失效):

SET sql_mode = 'ALLOW_INVALID_DATES,ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE';

如果需要永久生效,找到Windows系统中MySQL的配置文件my.ini(通常在C:\ProgramData\MySQL\MySQL Server 8.0目录下),修改sql_mode配置项为上述值,然后重启MySQL服务。

方案3:修正数据表中的无效数据

这是最彻底的解决方式,将insurance_data表中termination_date字段的空字符串统一更新为NULL:

UPDATE insurance_data 
SET termination_date = NULL 
WHERE termination_date = '';

之后查询无需再处理空字符串的情况,同时也符合DATETIME类型的存储规范。

内容的提问来源于stack exchange,提问作者Sandeep Patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 00:00:09