关于数据库时间字段的时区问题

2020-01-30 21:20:07 +08:00
 chenqh

大家数据库时区字段用的是 utc,还是本地,还是时间戳呢
之前我都是用本地时间,但是曾经出过一次错,存了 utc 时间到数据库里面去了,导致我对本地时间有点怕怕的,而且存本地时间,好像需要更改服务器时区设置,好像是的
但是使用 utc, 有点问题

  1. 渲染的时候需要加偏移(这只是麻烦点)
  2. 就是统计的问题了,如果是按天的统计表,那么这个统计表的day,那就是本地时间的了,这个样子有点郁闷呀 如果不使用统计表的方式,好像 sql 写起来会相当复杂呀!!
6441 次点击
所在节点    MySQL
28 条回复
optional
2020-01-31 11:47:02 +08:00
@keepeye 他纠结的问题就在这里,如果 created_at 不带时区的话,不能按照 local date 的方式统计。
keepeye
2020-01-31 12:48:52 +08:00
@optional 还是没明白,连接的时候指定下本地时区,查询的时候数据库会自动将 created_at 转换成本地时区
keepeye
2020-01-31 12:50:57 +08:00
不信就做个试验吧,可能很多人还不理解 connection 可以设置时区

mysql> select created_at from users limit 1;
+---------------------+
| created_at |
+---------------------+
| 2019-03-01 02:14:53 |
+---------------------+
1 row in set (0.00 sec)

mysql> set time_zone='-8:00';
Query OK, 0 rows affected (0.00 sec)

mysql> select created_at from users limit 1;
+---------------------+
| created_at |
+---------------------+
| 2019-02-28 10:14:53 |
+---------------------+
1 row in set (0.00 sec)

mysql> select date(created_at) from users limit 1;
+------------------+
| date(created_at) |
+------------------+
| 2019-02-28 |
+------------------+
1 row in set (0.00 sec)
optional
2020-01-31 12:58:07 +08:00
@keepeye 我也是这个意思。
chenqh
2020-01-31 13:15:00 +08:00
@keepeye 之前都不知知道 connection 可以设置时区,但是我想了一下,有一个问题,使用了带时区的 connection,insert 或者 update 的时候, 时间必须是本地时间?
keepeye
2020-01-31 13:21:45 +08:00
@chenqh 对,mysql 会根据 connection 时区,将你本地写的值转换为 utc 存储,你只要设置好你本地和连接的时区就行了,数据转换对你来说是透明的
chenqh
2020-01-31 14:15:56 +08:00
@keepeye 这个样子好复杂呀,假如一步出错,估计要查好久,算了,以后我还是用 timestamp 吧
lialzm
2020-07-02 12:25:04 +08:00
@optional 麻烦问下 postgre 怎么在连接上设置时区我查到的都是修改 jvm 的参数

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

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

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

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

© 2021 V2EX