我正在尝试将表中的条目插入或更新为雅典时区。我使用的是共享主机,因此无法设置全局服务器时区。
当我运行这个多重查询时:
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;
设置更新条目的时间仍然是服务器的时间!为什么会发生这种情况,我该如何解决这个问题?
MySQL将时间戳值从当前时区转换为UTC进行存储,并从UTC转换回当前时区以进行检索。(对于其他类型(如 DATETIME),不会发生这种情况。默认情况下,每个连接的当前时区是服务器的时间。可以基于每个连接设置时区。只要时区设置保持不变,您就会得到与存储相同的值。如果存储 TIMESTAMP 值,然后更改时区并检索该值,则检索的值与存储的值不同。发生这种情况是因为没有使用相同的时区进行双向转换。当前时区可用作time_zone系统变量的值。
http://dev.mysql.com/doc/refman/5.6/en/datetime.html