不,不可能更改MySQL实例中单个数据库的时区。
我们可以
time_zone通过查询来检索服务器和客户端设置,如下所示:
SELECT @@global.time_zone, @@session.time_zone;
我们还可以更改会话的客户端时区,或更改整个MySQL实例的时区。
但是,我们需要敏锐地意识到此更改将对现有客户端连接产生的影响,并且将解释实例中已存储的方式
DATETIME和
TIMESTAMP值。
要在MySQL实例启动时设置服务器time_zone,我们可以
/etc/my.cnf在以下
[mysqld]部分下修改文件(或在读取mysql实例初始化参数的任何位置):
[mysqld]default-time-zone='+00:00'
- 要么 -
也可以(不太理想)将
--default_time_zone='+00:00'选项添加到mysqld_safe
注意:
更改MySQL服务器上的时区设置不会更改存储在现有DATETIME或TIMESTAMP列中的值,但由于它确实有效地更改了解释这些存储值的上下文,因此看起来所有值都已移位。(如果将08:00表示为CST,则服务器的time_zone从CST更改为GMT,则现在将相同的“
08:00”设为GMT 8AM,实际上就是2AM CST。
还请记住,TIMESTAMP列始终存储在UTC中,而DATETIME列没有时区。
http://dev.mysql.com/doc/refman/5.5/zh-
CN/datetime.html
每个客户端会话都可以为其自己的会话更改时区设置:
SET time_zone='-06:00';
但这并不能真正“解决”时区转换问题,它只是解决了转换问题。
应用程序层处理时区转换没有天生的“坏”之处。有时,这是处理的最佳地点。它只需要正确且一致地完成即可。
(您描述的设置奇怪的是,应用程序正在存储DATETIME值,就像将MySQL服务器time_zone设置为GMT,而将MySQL服务器time_zone设置为其他东西一样。)



