Mybatis Zero date value prohibited 异常解决

2022-06-30 08:18:26

参考https://blog.csdn.net/sunforraining/article/details/80055435


出现原因

当数据库字段类型为timestamp并且值为0时会抛出 DataReadException异常

源码在 mysql-connector-java-8.0.19-source.jar / com.mysql.cj.result.SqlTimestampValueFactory中的localCreateFromTimestamp方法

mysql驱动器定义了很多配置项 在com.mysql.cj.conf.PropertyKey

比如常见的设置编码

在真正取值之前 会先判断了zeroDateTimeBehavior 配置项 , 处理日期为空的情况

源码在  com.mysql.cj.result.AbstractDateTimeValueFactory#createFromTimestamp

如上图如果不配 会走入default ,  到时候为空就直接报错了

解决方法

所以呢 在url上加入 &&zeroDateTimeBehavior=

有两个可选值

  1. convertToNull 如果为0则直接转为null
  2. ROUND 直接将为0的日期转为左图的值

一般都是用 CONVERT_TO_NULL

jdbc:mysql://127.0.0.1/homestay?zeroDateTimeBehavior=CONVERT_TO_NULL
  • 作者:阿里巴巴首席技术官
  • 原文链接:https://sixsixsix516.blog.csdn.net/article/details/105409844
    更新时间:2022-06-30 08:18:26