0

我正在尝试将表中的条目插入或更新到雅典时区。我正在使用共享主机,所以我无法设置全球服务器时区。

当我运行这个多重查询时:

SET time_zone="Europe/Athens";
SELECT NOW();

我得到了想要的雅典时间,但是当我运行类似的东西时:

SET time_zone="Europe/Athens";
UPDATE `db`.`tbl` SET `the_time` = NOW() , `foo` = '1' WHERE `tbl`.`id` = 100;

设置更新条目的时间仍然是服务器的时间!为什么会发生这种情况,我该如何解决?

4

1 回答 1

0

MySQL 将 TIMESTAMP 值从当前时区转换为 UTC 进行存储,并从 UTC 转换回当前时区进行检索。(这不会发生在其他类型,例如 DATETIME。)默认情况下,每个连接的当前时区是服务器的时间。可以基于每个连接设置时区。只要时区设置保持不变,您就可以返回存储的相同值。如果您存储一个 TIMESTAMP 值,然后更改时区并检索该值,则检索到的值与您存储的值不同。发生这种情况是因为没有使用同一时区进行双向转换。当前时区可用作 time_zone 系统变量的值。

http://dev.mysql.com/doc/refman/5.6/en/datetime.html

于 2013-10-08T22:24:36.060 回答