【问题标题】:Unable to change the timezone of Mysql server无法更改Mysql服务器的时区
【发布时间】:2018-04-12 16:54:33
【问题描述】:

我们将时区设置为 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 的服务器相比,该服务器上唯一不同的值似乎是设置为 IST 的 system_time_zone 变量,如上所示。

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

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

据我所知,以下还将尝试更新time_zone - 设置全球 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'

【问题讨论】:

    标签: mysql windows timezone zoneinfo


    【解决方案1】:

    您的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 通常很有帮助。然后,我们允许用户在注册使用网络应用程序时选择时区偏好。也许,如果您的网络应用程序是全印度的,您就不需要这种额外的复杂性。

    【讨论】:

    • 我尝试在我的 Windows 设置上更改此设置以预先对其进行测试,但是这两个命令都出现了不正确的时区错误。查看我的问题更新。
    • 哦,这是一台 Windows 机器,是吗?您必须做一些令人作呕的事情才能将 zoneinfo 数据库加载到 Windows 上。 dev.mysql.com/downloads/timezones.html
    猜你喜欢
    • 2011-08-26
    • 2011-10-09
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多