Prisma操作MySQL数据库,数据的时间少了8小时?

作者站长头像
站长
· 阅读数 63

我在写一个 Next.js 项目,数据库用的是腾讯云的 MySQL 5.7 版本,通过命令 SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP); 查询到的结果是 08:00:00,数据库的时区应该没问题,但是 Prisma 创建数据的时间少了8个小时,这是什么原因?

schema.prisma 文件:

model User {
  ...
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}
回复
1个回答
avatar
test
2024-06-27

数据库本身是不会保存时区信息的,所以数据库保存的时间需要约定好,是 UTC 还是某个地方的本地时间。一般情况下,建议保存 UTC 时间,方便转换。

接下来就是存取的时候,存之前一定要把本地时间转换成 UTC 时间再来存。而取的时候,也需要进行逆向转换。一般我们会在服务端做这个事情,由于服务端本身可能为多个地区的用户服务,所以服务端一般也建议使用 UTC 时间。

然后是在浏览器端,浏览器端因为直接面向用户,默认都是按本地时间来用的。所以从浏览器传数据到服务端的时候,需要在服务端判断这个时间到底是哪个时区的,然后再处理成 UTC 时间。而多数情况下非用户指定时使用的当前时间,这个过程可以替换成取服务器当前时间

参阅:考虑时区了吗?

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容