参考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=
有两个可选值
- convertToNull 如果为0则直接转为null
- ROUND
直接将为0的日期转为左图的值
一般都是用 CONVERT_TO_NULL
jdbc:mysql://127.0.0.1/homestay?zeroDateTimeBehavior=CONVERT_TO_NULL