问题1/3:
我有多个MySQL
要连接的数据库并希望确保查询之间的时间一致性。例如,其中一台服务器当前位于CDT
时区。
> select CURRENT_TIMESTAMP, @@system_time_zone, @@global.time_zone, @@session.time_zone;
+---------------------+--------------------+--------------------+---------------------+
| CURRENT_TIMESTAMP | @@system_time_zone | @@global.time_zone | @@session.time_zone |
+---------------------+--------------------+--------------------+---------------------+
| 2019-05-31 09:44:45 | CDT | SYSTEM | SYSTEM |
+---------------------+--------------------+--------------------+---------------------+
注意:我们在DST
现在,所以它是CDT
. I'm assuming这会自动更改为CST
当在外面时DST
, right?
有了以上的知识,我的DSN
后缀看起来像这样:
...?parseTime=true&loc=America%2FChicago // i.e. 'America/Chicago' - maybe 'CST6CDT' would work too?
那么,有没有一种编程方式go
从 3 字母代码映射CDT
更正式的时区名称,例如America/Chicago
.
2/3:
上面提出了先有鸡还是先有蛋的场景:为了确定远程服务器的时区,需要连接/查询服务器;有了这些知识,DSN 参数可能会因将来的调用而更改。
事后是否可以更改 DSN 参数,或者进行全新的连接sql.DB
需要创建连接池吗?
3/3:
您可能会问,为什么要检查时区是否已更改 - 它不是静态的吗?在负载平衡数据库的情况下应该做什么?理论上两个副本可以位于不同的时区吗?
是否所有带时间戳的列都用 SQL 封装UNIX_TIMESTAMP()
标准化数据并避免这个令人头疼的问题?
我也可能会陷入时间漂移,但我现在就到此为止。