无法更改Mysql服务器的时区

时间:2017-10-31 13:36:57

标签: mysql windows timezone zoneinfo

我们将时区设置为IST(印度标准时间)以开始 -

mysql> show global variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | IST    |
| time_zone        | SYSTEM |
+------------------+--------+


SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM             | SYSTEM              |
+--------------------+---------------------+
1 row in set (0.00 sec)

mysql> select NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2017-10-31 17:05:26 |
+---------------------+

上面显示与服务器时间相同的时间,也是IST。

我们想将其更改为UTC。与时区为UTC的服务器相比,此服务器上唯一不同的值似乎是system_time_zone变量,如上所示设置为IST。

不确定要更改哪个变量/配置。

我们尝试更改my.ini中的default-time-zone,但它更改了time_zone变量而不是system_time_zone

根据我的理解,以下内容也会尝试更新time_zone -  SET GLOBAL time_zone =“+ 00:00”;

所以,不确定会更新system_time_zone的内容。

已经检查https://stackoverflow.com/a/5359622/351903 不确定system_time_zone和time_zone之间究竟有什么区别。

此外,The Mysql documentation says -

  

--timezone或TZ的允许值取决于系统。

无法在Windows和Cent OS服务器上找到适当的IST值。 From this article它似乎需要一些调查。有人可以帮忙吗?任何指针。

背景

我想要的是在服务器上select NOW();时看到5:30小时的时差。目前它与应用程序服务器时间(也是IST)显示的时间相同。我们正试图添加这种差异来重现测试场景。

更新

在我的Windows设置上获取以下内容 -

mysql> SET time_zone = 'Asia/Kolkata';
ERROR 1298 (HY000): Unknown or incorrect time zone: 'Asia/Kolkata'
mysql> SET time_zone = "Asia/Kolkata";
ERROR 1298 (HY000): Unknown or incorrect time zone: 'Asia/Kolkata'
mysql> SET time_zone = "UTC";
ERROR 1298 (HY000): Unknown or incorrect time zone: 'UTC'

1 个答案:

答案 0 :(得分:2)

您的MySQL software's system time zone default设置为服务器计算机的默认时区。这就是SYSTEM在该环境中的含义。您的服务器机器依次设置为印度时间。

请注意,NOW()和TIMESTAMP数据在显示或检索时始终会转换为本地时间。本地时间是通过time_zone变量的设置定义的,可以是为MySQL连接设置的变量,也可以是全局变量。

尝试此序列,看看你是否在UTC中获得NOW(),然后在印度时间。此序列设置连接的time_zone变量。这样做会覆盖系统设置。

 SET time_zone = 'UTC';
 SELECT NOW();
 SET time_zone = 'Asia/Kolkata';  /* zoneinfo name for India time */
 SELECT NOW();

如果达到预期效果,可以将服务器计算机上的默认时区设置从印度时间更改为UTC。这通常是很好的做法。如何做到这取决于您的服务器机器的操作系统。这说明了如何为Ubuntu做这件事。

https://askubuntu.com/questions/323131/setting-timezone-from-terminal

或者,您可以编辑MySQL配置文件以包含如下所示的行:

 default-time-zone='UTC'

并重新启动MySQL服务器软件。

在美国,我们有一堆乱七八糟的时区,将默认值设置为UTC通常很有帮助。然后,我们允许用户在注册使用Web应用程序时选择时区首选项。也许,如果您的网络应用程序是全印度的,那么您不需要增加复杂性。