Вопрос 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
. Я при условии, что это автоматически изменится на CST
, когда выйдет за пределы DST
, верно?
Итак, с учетом вышеизложенного, мой суффикс DSN
выглядит примерно так:
...?parseTime=true&loc=America%2FChicago // i.e. 'America/Chicago' - maybe 'CST6CDT' would work too?
Итак, есть ли в * 1020 программный способ сопоставить трехбуквенный код CDT
с более формальными именами часовых поясов, такими как America/Chicago
.
2/3:
Выше представлен сценарий «курица / яйцо»: для определения часового пояса удаленного сервера необходимо подключиться / запросить сервер; с этим знанием параметры DSN могут измениться для будущих вызовов.
Можно ли изменить параметры DSN по факту или необходимо создать новое соединение sql.DB
пул соединений?
3/3
Вы можете спросить, зачем проверять, изменился ли часовой пояс - разве он не статичен? Что делать в ситуации с БД с балансировкой нагрузки? Теоретически две копии могут быть в разных часовых поясах?
Должны ли все столбцы с временными метками быть просто обернуты в SQL UNIX_TIMESTAMP()
, чтобы нормализовать данные и избежать этой головной боли?
Я тоже мог бы попасть во времена, но сейчас остановлюсь.