问答详情
源自:4-9 DAO层单元测试编码和问题排查(下)

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

如果报错 Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp 是因为 jdbc默认最小时间 为 0001-01-01 00:00:00 所以转换为 sql timestamp 失败 解决办法 在连接数据库的url中加入&zeroDateTimeBehavior=convertToNull 类似 jdbc:mysql:///seckill?useUnicode=true&zeroDateTimeBehavior=convertToNull&characterEncoding=utf-8

提问者:dbcooper 2017-06-02 22:09

个回答

  • Yoooshiki
    2017-06-17 16:04:46
    已采纳

    如在测试queryByIdWithSeckill()方法的时候遇到了:

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

    那是因为:SuccessKilled表在创建的时候,有create_time字段(属性为timestamp),但并没有给该字段设定默认值。后插入数据时,create_time字段的值就变成了:0000-00-00 00:00:00. 

    "0000-00-00 00:00:00" 在MySQL中是作为一个特殊值存在的,但 java.sql.Date 将其视为不合法的值,格式不正确。

    • 解决办法: 

      • 方法一:jdbc的url后面,追加上参数:

        ?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull

      • 方法二:给timestamp字段加上默认值

        如以当前时间作为默认值,这样就不会是"0000-00-00 00:00:00"了。

  • weixin_慕移动7203029
    2019-10-05 10:03:51

    为什么我赋了默认值这个字段还是null

  • McCree_X
    2018-10-31 10:30:23

    请问大佬,我在后台怎么给时间字段赋值为当前时间呢,试过很多都没解决,求帮助。