jdbc认为mysql datetime默认值无效

今天想使用kettle抽取一张30W记录的表,我想简单的看一下kettle抽取的效率,不想在抽取至7999行时报错。查看日志:

"

...Couldn't get row from result set...

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

一开始没有注意下面的时间方面的问题,把注意力放在了“Couldn't get row from result set”,查询了一些网上的资料,加大了mysql的net_write_out并取消了kettle的“DB连接”中的“Use Result Streaming Cursor”,但是错误现象依旧。看样子应该不是它们引起的问题。

在未能解决问题的情况下,开始关注下面这句错误,我查询了错误停止的7999行,发现从这行开始这个时间字段除了正常的时间数据以外还有NULL值与'0000-00-00 00:00:00'值,难道这类的值引起的错误,在查询了相关资料后,才知道jdbc(默认行为)认为null或'0000-00-00'这样的日期时间值是无效的。如果想避开这个问题,需要编辑jdbc的连接属性,添加如下属性值:

zeroDateTimeBehavior=convertToNull 

设计生产系统中的相关表时,默认值最好不要使用'0000-00-00'这样的值。 

posted @ 2011-03-09 16:57  番茄侠  阅读(1735)  评论(0编辑  收藏  举报