MySQL Timestamp 不能直接接收整型

2021-04-27 17:22:01 +08:00
 anzu

字段: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 字段不能直接接收整型,坑啊啊啊啊

1059 次点击
所在节点    MySQL
3 条回复
brader
2021-04-27 17:24:46 +08:00
timestamp 接受一个时间字符串。
建议用 int 吧,我做了这么多项目,都是一直用的 int
yogogo
2021-04-27 17:24:52 +08:00
我都是用 int
liprais
2021-04-27 17:26:53 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/773653

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX