Sqoop同步任务‘ can not be represented as java.sql.Date

0 错误原因

Caused by: java.sql.SQLException: Value '80236!B25CGSFBY-AL-B-5A7E423349804A31-2025000320250032394.001B010020250023653460002026-06-07 17:19:002020-06-08 17:19:001900-01-01 00:00:001900-01-01 00:00:001900-01-01 00:00:00S0200608171910137-100110.000.000.006������GTV8������������������������������������������ A
                                                                  wanzongfeng2020-06-08 17:19:00NaN1900-01-01 00:00:00  ���������0000-00-00 00:00:002021-02-19 14:21:442021-02-19 14:21:44����������������:21:44������:21:44�����' can not be represented as java.sql.Timestamp

1 原因分析

原因分析:

'0000-00-00 00:00:00' 这个时间不能用 Java 来表示。虽然数据库中可以存放这个值,但是 Java 中的时间都是从 1970 年开始的。格林威治时间 1970年01月01日00时00分00秒(UTC+8北京时间1970年01月01日08时00分00秒),所以你这个 '0000-00-00 00:00:00' 的时间,Java 表示不了,所以就抛出了这个异常。

2 解决方法

解决方法:

	--connect "jdbc:mysql://${mysql_host}:${mysql_port}/${1}?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull"


主要添加:&zeroDateTimeBehavior=convertToNull即可

MySQL 的官方资料对 zeroDateTimeBehavior 属性做出了详细的解释,相见参考资料。

设置 zeroDateTimeBehavior 属性,当遇到 DATETIME 值完全由 0 组成时,最终的有效值可以设置为,异常(exception),一个近似值(round),或将这个值转换为 null(convertToNull)。

默认情况为 exception,设置这个属性会抛出一个 SQLException 异常,也就是文章开头所说到的异常。其 SQLSate 码为 S1009。这个状态码在写存储过程处理异常时也可以用到。

convertToNull,返回 null 来替代 0000-00-00 这样的日期。
 

参考链接:(9条消息) java.sql.SQLException: Value ‘0000-00-00 00:00:00’ can not be represented as java.sql.Timestamp_zhuzj12345的博客-CSDN博客icon-default.png?t=M1L8https://blog.csdn.net/zhuzj12345/article/details/84333672

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值