5

自从 2 周以来,我对时区问题感到困惑,在我的本地主机上一切正常,但在专用服务器上返回错误值。让我告诉我到目前为止我做了什么。

首先通过以下查询设置全球时区:(本地主机和服务器上的超级权限)

 SET GLOBAL time_zone = '+00:00';

现在在查询下方运行以交叉检查所做的任何事情

SELECT NOW(),@@global.time_zone AS gtz,@@session.time_zone AS stz,
       TIMEDIFF(NOW(), CONVERT_TZ( NOW() , @@session.time_zone ,  '+00:00' ) )
       AS OFFSET;

但它在本地和专用服务器上显示不同的结果

在 localhost (192.168.xx) mysql 版本:5.5.8

+---------------------+--------+--------+----------+
| NOW()               | gtz    | stz    | OFFSET   |
+---------------------+--------+--------+----------+
| 2012-07-02 07:06:55 | +00:00 | +00:00 | 00:00:00 |
+---------------------+--------+--------+----------+
1 row in set (0.00 sec)

在专用服务器(182.168.xx)上 mysql 版本:5.1.53-log

+---------------------+--------+--------+----------+
| NOW()               | gtz    | stz    | OFFSET   |
+---------------------+--------+--------+----------+
| 2012-07-02 12:37:59 | +00:00 | +00:00 | 00:00:00 |
+---------------------+--------+--------+----------+

我的问题是

为什么NOW()给出错误的时间(上面是 IST )而时区设置为 +00:00 ?

边注 :

我在查询下运行

SHOW VARIABLES LIKE '%time%zone%';

在本地主机上

+------------------+---------------------+
| Variable_name    | Value               |
+------------------+---------------------+
| system_time_zone | India Standard Time |
| time_zone        | +00:00              |
+------------------+---------------------+

在服务器上

+------------------+---------------------+
| Variable_name    | Value               |
+------------------+---------------------+
| system_time_zone | GMT+5               |
| time_zone        | +00:00              |
+------------------+---------------------+

这会影响结果吗?或者

早期版本的mysql有什么错误吗?

请帮我。

4

4 回答 4

8

在调用NOW()(和相关函数)时,MySQL 将计算机的系统时钟转换为会话时区:

  • 如果系统时钟设置为12:30+05:30并且会话时区为+00:00,则结果为07:00

  • 如果系统时钟设置为17:30+05:00并且会话时区为+00:00,则结果为12:30

--timezone但是,可以通过使用命令行参数来“欺骗”MySQL,使其认为系统时钟与操作系统认为的时区不同mysqld_safe

  • 如果系统时钟设置为17:30+10:30且会话时区为+00:00,但 MySQL 以指定系统时钟应理解为的方式启动GMT+5,则结果将与上面的第二个项目符号相同。

因此,您应该检查:

  1. 系统时钟的时区与system_time_zone系统变量中给定的值一致(如果没有,请确保您没有指定--timezone参数,mysqld_safe并且在调用时没有TZ设置环境变量mysqld_safe);

  2. 系统时钟在其指定的时区报告正确的时间。

于 2012-07-02T08:20:37.130 回答
3

您只需要在更改系统时区后重新启动 mysqld..

MySQL 的全局时区采用 System 的时区。当您更改系统的任何此类属性时,您只需要重新启动 Mysqld。

而已。

于 2014-04-01T04:10:33.463 回答
0

1) 如有必要,更改您的系统时间和时区。2)打开mysql控制台并输入你的时区,像这样:SET GLOBAL time_zone = "+04:00"; 3)重启mysql。

于 2013-07-04T06:57:23.143 回答
-1

我已经测试过 - SET time_zone='+05:30'; 它正在工作,但我没有全局权限,所以你尝试通过设置服务器时间 +05:30 -> SET GLOBAL time_zone = '+05:30';

于 2014-02-21T07:32:38.167 回答