字段:begin_at timestamp;
JPA:private Timestamp beginAt;
程序运行环境本地时间与数据库本地时间不同。
begin_at 是前端传来的时间戳,但是在保存的时候 JPA 将它转换成了本地时间(+0 时区)字符串表示,插入数据库的时候,数据库将该字符串再次转换成时间戳,然而使用的是+8 时区进行转换,导致最终保存在数据库的时间戳少了 8 小时。
Java 日志类似如下:
org.hibernate.SQL : insert into table (begin_at) values (?)
o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [TIMESTAMP] - [2021-04-27 16:33:07.645]
我以为是 JPA 捣乱,试着直接在 MySQL 敲命令:
insert into table (begin_at) values (1619514153)
报错:
Incorrect datetime value: '1619514153' for column 'begin_at'
原本想用时间戳统一表示时间,消除因不同时区导致的时间问题,结果 MySQL 的 timestamp 字段不能直接接收整型,坑啊啊啊啊
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.