Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp

来源:互联网 时间:1970-01-01


一、mysql问题:

处理Sql查询遇到这样一个问题,有个字段定义类型是datetime,且非空无默认值,

在java中取数据时遇到下面问题:

Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp

后查资料发现 “0000-00-00 00:00:00”在mysql中是作为一个特殊值存在的

但 java.sql.Date 将其视为 不合法的值 格式不正确

二、解决方法:在数据库连接串处追加设置,

原连接串:driver-url=jdbc:mysql://127.0.0.1/test

给jdbc   url加上   zeroDateTimeBehavior参数:
datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull
zeroDateTimeBehavior=round是为了指定MySql中的DateTime字段默认值查询时的处理方式;默认是抛出异常,
对于值为0000-00-00   00:00:00(默认值)的纪录,如下两种配置,会返回不同的结果:
zeroDateTimeBehavior=round   0001-01-01   00:00:00.0
zeroDateTimeBehavior=convertToNull   null

个人感觉按通用性来说结果是Null可能好些,但是结果是一串零的更能贴近空时间的概念,所以具体选择看各自项目的需求选择使用吧。







相关阅读:
Top