自从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;
但它在本地和专用服务器上显示不同的结果
+---------------------+--------+--------+----------+
| NOW() | gtz | stz | OFFSET |
+---------------------+--------+--------+----------+
| 2012-07-02 07:06:55 | +00:00 | +00:00 | 00:00:00 |
+---------------------+--------+--------+----------+
1 row in set (0.00 sec)
专用服务器上的+---------------------+--------+--------+----------+
| 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有没有错误?
请帮帮我。
答案 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
的方式启动,结果将与上面的第二个子弹相同。因此,您应该检查:
系统时钟的时区与system_time_zone
系统变量中给出的值一致(如果没有,请确保您没有为--timezone参数> mysqld_safe
并且在调用 TZ
时设置了mysqld_safe
个环境变量;)
系统时钟在指定的时区内报告正确的时间。
答案 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';