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

MySQL允许0000年份但Java读取报错,如何配置允许0000-01-01类日期?

问题1:MySQL存储0000年日期,Java读取报错的解决办法
  • 在JDBC连接URL中添加参数,修改驱动对零日期的处理行为:
    • 若想将0000格式日期转为null,添加:zeroDateTimeBehavior=convertToNull,示例URL:jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
    • 若想将0000格式日期转为合法的最小日期(0001-01-01),添加:zeroDateTimeBehavior=round
  • 也可考虑将MySQL中的日期字段类型改为VARCHAR,直接以字符串形式存储和读取,但这种方式会丢失日期类型的原生校验与运算能力,不推荐使用。
问题2:配置MySQL允许存储0000-01-01这类日期

MySQL的日期校验由sql_mode参数控制,要允许存储0000-01-01,需移除相关限制模式:

临时生效(重启MySQL后失效)

执行SQL命令修改全局sql_mode:

SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

注意:上述命令移除了NO_ZERO_DATE和NO_ZERO_IN_DATE两个限制模式,你可根据自身需求保留其他必要模式。修改后新连接会立即生效,当前连接需重新连接才能应用新配置。

永久生效

  1. 找到MySQL配置文件:Linux系统通常为/etc/my.cnf或/etc/mysql/my.cnf;Windows系统通常为my.ini(位于MySQL安装目录或Data目录下)
  2. 在[mysqld]段中修改sql_mode配置,移除NO_ZERO_DATE和NO_ZERO_IN_DATE:
[mysqld]
sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
  1. 保存配置文件后,重启MySQL服务使配置生效。

补充说明:MySQL官方支持的合法日期范围是1000-01-01到9999-12-31,关闭零日期限制后虽允许存储0000-01-01这类“伪日期”,但仅能在宽松模式下使用,部分场景可能存在兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:52:18