MySQL timestamp 与时区问题

新项目可能存在国际化的问题,所以花了点时间了解了下 MySQL 和 JDBC 驱动相关的时间问题。看了好多篇博客发现,不少人理解的都是错误的,所以结合官方的文档,重新梳理了一下。

大家都知道在 MySQL 中有两个专门用来存取日期时间的类型,timestamp 和 datetime。大家总是说 datetime 不包含时区信息,timestamp 存的 utc 时间戳更适合国际化场景下的本地时间转换。经过了解,上述说法对,但不完全对。

版本信息:

  • MySQL5.7
  • mysql-connector-java 8.0.31

MySQL 用什么类型存日期时间?

目前可以存日期时间的数据类型主要分两类:

  • bigint:直接将 utc 时间戳存到 int 类型的字段中。后期根据用户本地时区进行转换。
  • 日期时间类型: timestamp:MySQL 官方定义的时间戳,内部使用 utc 时间戳存储,但查询时返回的结果会随着 session time_zone 的变化而变化。 datetime:只存日期时间的值,不包含时区信息。

那么我们应该选择哪个?先说结论在分析,根据需求选 bigint 或 datetime。

类型

优点

缺点

bigint

1. 直观,不需要考虑时区
2. 国际化场景直接根据本地时区转化
3. 存储和查询效率高

1. 数据库直接查看时可读性差,需要转化

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值