【踩坑日记】关于时间戳的异常

情景

在最近的一次作业中,保存时间的时候,由于懒得改前端组件时间,默认用了1970-01-01(只有年月日)上传数据,但是遇到了问题Data truncation: Incorrect datetime value: '1970-01-01 08:00:00' for column 'create_time' at row 1。但是改一下时间就可以正常提交,引发思考。

备注:
时间戳时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数

本地数据库时区 SELECT @@global.time_zone; ->SYSTEM,也就是北京时间

后端项目连接串serverTimezone=Asia/Shanghai

测试阶段

重新准备了一个项目,前端上传一个时间字符串,后端使用Timestamp接收(DTO),然后通过mapstruct进行类的转换(变成DO,对应字段LocalDateTime),最后保存到数据库,其中数据库的对应字段的类型是Timestamp

环境准备好后进行接口测试,用了idea里的HTTP文件进行测试

POST http://localhost:8080/demo
Content-Type: application/json

{
  "title": "测试1",
  "createTime": "1970-01-01"
}

###

返回结果就是500异常,错误信息如下,表示日期时间值不正确

could not execute statement [Data truncation: Incorrect datetime value: '1970-01-01 08:00:00' for column 'create_time' at row 1] [insert into t_demo (create_time,title) values (?,?)]

然后修改测试用例,改成1970-01-01T08:00:01就可以插入成功。并且查询得到的时间转成GMT+8的时间戳之后的值为1

item.getCreateTime().toEpochSecond(ZoneOffset.of("+8"));
// 1

接着直接去数据库改值,改成1970-01-01T08:00:00,报错了,不能这么改

在这里插入图片描述

那么通过SQL语句直接插入时间戳呢?

insert into t_demo (create_time,title) values (0,"测试3")

在这里插入图片描述

插入成功了,但是后端查询的时候报错了

在这里插入图片描述

总结

时间戳不能存 0

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值