将MySQL数据库时区设置为GMT

时间:2012-12-17 15:12:50

标签: mysql database timezone

我需要更改单个数据库的时区吗?

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

我现在正在开发一个新软件,并希望在GMT中拥有所有这些,我知道我可以使用date_default_timezone_set('GMT')但是这不能解决日期时间列设置为CURRENT_TIMESTAMP的MySQL插入,因为它将insert @ CST timezone。

3 个答案:

答案 0 :(得分:43)

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

您可以检索服务器和客户端time_zone设置:

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

您还可以更改客户端时区或整个MySQL实例的时区。

但要敏锐地了解现有客户端连接的含义,以及如何解释已存储在实例中的DATETIME和TIMESTAMP值。

要在MySQL实例启动时设置服务器time_zone,请在[mysqld]部分下修改/etc/my.cnf文件(或从中读取mysql实例初始化参数的位置):

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

- 或 -

--default_time_zone='+00:00'选项添加到mysqld_safe

注意:更改MySQL服务器上的时区设置不会更改存储在现有DATETIME或TIMESTAMP列中的值,因为它确实有效地更改了解释这些存储值的上下文,它将看起来像所有值都被移位。 (其中08:00是指CST上午8点,服务器的time_zone从CST变为GMT,同样'08:00'现在将被视为格林尼治标准时间上午8点,实际上是2AM 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设置为其他东西。)

答案 1 :(得分:3)

如果您无法更改当前时区,可以更改结果。

date 2015-01-05 12:06:16

Select date + Interval 2 Hour 'date' From ExampleTable

date 2015-01-05 14:06:16

答案 2 :(得分:0)

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