时刻出现非凡难题,消除方案

 

 

数据库:mysql

前几天在利用MyBatis查找MySQL数据库的时候,现身了2个原先不曾碰到过的失实,未来写出来,没准有哪个人看到那篇小说,就能一举成功难点。

 
同步揭橥:

 
同步揭橥:

系统:windows7

代码抛出的格外新闻正是主题素材中的:

 
在利用mysql时,即使数据库中的字段类型是timestamp,默感到0000-00-00,会生出至极:Value
‘0000-00-00 00:00:00’ can not be represented as
java.sql.Timestamp.

 
在利用mysql时,假使数据库中的字段类型是timestamp,暗中认可为0000-00-00,会产生分外:Value
‘0000-00-00 00:00:00’ can not be represented as
java.sql.Timestamp.

服务器:windows server 2008

java.sql.SQLException: Value ”0000-00-00” can not be represented as
java.sql.Date……

    消除办法如下:

    化解办法如下:

此情此景:远程数据库抽取数据,存款和储蓄到本地数据库。mysql到mysql。在那之中,远程数据库mysql中有字段datetime类型,里面包车型客车数码是0000-00-00
00:00:00;mysql允许此种数据存在。

入眼是这一句。

时刻出现非凡难题,消除方案。   
给数据库的jdbc.url加上zeroDateTimeBehavior参数,如下:

   
给数据库的jdbc.url加上zeroDateTimeBehavior参数,如下:

消除格局:

997755.com澳门葡京,透过自己软bing国际版的不懈努力(打波广告,哈哈),找到了难点出现的由来与缓和方案。

jdbc.url=jdbc:mysql://localhost:3306/table?characterEncoding=UTF-8&zeroDateTimeBehavior=round
jdbc.url=jdbc:mysql://localhost:3306/table?characterEncoding=UTF-8&zeroDateTimeBehavior=round

化解办法是在jdbc连接配置的连接url加上参数:zeroDateTimeBehavior=convertToNull 
如:jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull

由来(是自己翻译过来的):

  zeroDateTimeBehavior参数有三种配备:

  zeroDateTimeBehavior参数有三种配备:

这么会把mysql零值的时日等级次序转化为java的null。

当MySQL中date或datetime类型的列有全0值时会出现此错误,举个例子0000-00-00
00:00:00,

  • zeroDateTimeBehavior=round
    ,”0000-00-00“会私下认可转变为”000壹-01-0一 00:00:00”
  • zeroDateTimeBehavior=convertToNull,“0000-00-00“会转移为null
  • zeroDate提姆eBehavior=round
    ,”0000-00-00“会暗许转变为”000一-0壹-01 00:00:00”
  • zeroDateTimeBehavior=convertToNull,“0000-00-00“会转移为null

1旦数据库私下认可插入有个别值,那几个null会覆盖数据库私下认可值。

 MySQL Connector/J 三.0.x
(三.0各版本)会把为0的date可能datetime类型调换为null值,但是在MySQL
Connector/J 叁.1及事后的版本中就不是如此了,.暗许会抛出这么一条十一分”java.sql.SQLException:
Value ‘0000-00-00’ can not be represented as
java.sql.Date”还有三个状态码“sqlstate
s100玖”。(那段前面还有句话,和abobe有关,我就不翻译了,原来的小说链接:

再有来自StackOverflow热心同学的讲明(原著链接:

MySQL以为‘0000-00-00’是八个实惠的日子,但是Java.sql.Date并不那样感到,它不能够科学地代表出这一个日期。

好了,接下去是化解办法,首要也是StackOverflow提供的:

一、使用case when语句,将搜索出的0日期转换为null,举例那样:

SELECT

  CASE WHEN `date`!=’0000-00-00′ THEN `date` END new_date

FROM

  yourtable

2、在一而再字符串中增多zeroDateTimeBehavior=convertToNull完毕自动调换

三、也足以去数据库把0日期手动改成null(那条是自己想的,哈哈)

嗯~ o(* ̄▽ ̄*)o,这几个主题素材就解决了。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website