Mybatis Zero date value prohibited 异常解决

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


出现原因

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

Mybatis Zero date value prohibited 异常解决_第1张图片

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

 

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

Mybatis Zero date value prohibited 异常解决_第2张图片

比如常见的设置编码

 Mybatis Zero date value prohibited 异常解决_第3张图片

Mybatis Zero date value prohibited 异常解决_第4张图片

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

Mybatis Zero date value prohibited 异常解决_第5张图片

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

 

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

Mybatis Zero date value prohibited 异常解决_第6张图片

 

解决方法

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

有两个可选值 

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

 

一般都是用 CONVERT_TO_NULL

jdbc:mysql://127.0.0.1/homestay?zeroDateTimeBehavior=CONVERT_TO_NULL

 

你可能感兴趣的:(Java)