mysql NOW()返回错误的值,而全局时区设置为+00:00

时间:2012-07-02 07:25:03

标签: mysql timezone-offset

自从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;

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

on localhost(192.168.x.x)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.x.x)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              |
+------------------+---------------------+
  

这会影响结果吗? OR

     

早期版本的mysql有没有错误?

请帮帮我。

4 个答案:

答案 0 :(得分:5)

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

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

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

然而,人们可以“愚弄”MySQL认为系统时钟与操作系统认为使用--timezone命令行参数mysqld_safe所认为的时区不同:

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

因此,您应该检查:

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

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

答案 1 :(得分:3)

您需要在更改System ..的时区后重新启动mysqld。

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

那就是它。

答案 2 :(得分:0)

1)如有必要,请更改系统时间和时区。 2)打开mysql控制台并输入你的时区,如下所示:SET GLOBAL time_zone =“+ 04:00”; 3)重启mysql。

答案 3 :(得分:-1)

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