将MySQL数据库时区设置为GMT



我需要更改单个数据库的时区,这可能吗?

我知道我们可以在WHM中更改时区(我们使用的是hostgator的专用服务器),但是服务器上运行的大量遗留软件中有很多+6小时的编码(即服务器时区是CST,我们希望时间是GMT,所以以前的开发人员在代码中手动更改日期/时间-糟糕!)。

我现在正在开发一个新软件,希望在GMT中完成,我知道我可以使用date_default_timezone_set("GMT"),但这不会解决MySQL插入的问题,因为它将插入@CST时区,而将日期时间列设置为CURRENT_TIMESTAMP。

不,不可能在MySQL实例中更改单个数据库的时区。

我们可以通过查询检索服务器和客户端time_zone设置,如下所示:

SELECT @@global.time_zone, @@session.time_zone;

我们还可以更改会话的客户端时区,或者更改整个MySQL实例的时区。

但是,我们需要敏锐地意识到这一更改将对现有客户端连接产生的影响,以及如何解释实例中已经存储的DATETIMETIMESTAMP值。

要在MySQL实例启动时设置服务器time_zone,我们可以修改/etc/my.cnf文件(或者从哪里读取MySQL实例初始化参数),在[mysqld]部分下:

[mysqld]
default-time-zone='+00:00' 

--或--

在mysqld_safe 中添加--default_time_zone='+00:00'选项也是可能的(不太可取)

注意:更改MySQL服务器上的时区设置不会更改存储在现有DATETIME或TIMESTAMP列中的值,但由于它确实有效地更改了解释这些存储值的上下文,因此看起来所有值都发生了偏移。(其中08:00被取为上午8点CST,服务器的时区从CST更改为GMT,相同的"08:00"现在将被取为早上8点GMT,实际上是凌晨2点CST。

还要记住,TIMESTAMP列始终存储在UTC中,而DATETIME列没有时区。http://dev.mysql.com/doc/refman/5.5/en/datetime.html

每个客户端会话都可以更改自己会话的时区设置:

SET time_zone='-06:00';

但这些都没有真正"解决"时区转换问题,只是转移了转换问题。

应用层处理时区转换并没有本质上的"坏";有时候,这是最好的处理方式。它只需要正确而一致地完成。

(你描述的设置奇怪的是,应用程序存储DATETIME值,就好像MySQL服务器的time_zone设置为GMT,但MySQL服务器的time_zone却设置为其他值一样。)

如果不能更改当前时区,则可以更改结果。

日期2015-01-05 12:06:16

Select date + Interval 2 Hour 'date' From ExampleTable

日期2015-01-05 14:06:16

您可以修改默认值,而不是输入current_timestamp,使其插入添加到时区小时偏移量的current_timestamp。当我没有找到任何解决方案时,我就这样做了,不得不发明自己的解决方案。

相关内容

  • 没有找到相关文章

最新更新