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

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

dbcooper

2017-06-02 22:09

如果报错 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

写回答 关注

3回答

  • 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"了。

    dbcoop...

    非常感谢!

    2017-09-12 22:01:46

    共 4 条回复 >

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

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

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

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

Java高并发秒杀API之业务分析与DAO层

Java实现高并发秒杀API的第一门课,还等什么,赶快来加入吧

87524 学习 · 522 问题

查看课程

相似问题