MySQL 8.0.35报错1525:无效DATETIME值''的解决求助
解决MySQL 8.0.35查询时的Error Code: 1525错误
错误原因
你遇到的Error Code: 1525. Incorrect DATETIME value: '',核心原因如下:
ALLOW_INVALID_DATESSQL模式仅允许格式正确但逻辑无效的日期(比如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
相关产品推荐
相关产品推荐

