2012-10-25 68 views
3

我前几天发表了一篇文章,并使用了从响应中给出的建议。我有一个大型的Web应用程序,它托管在我们的时区的服务器上,在那里我使用了所有的datetime/timestamps到当前的时区。我应该使用UTC并将它在代码级别上转换为适当的时区。MySQL时区混淆

嗯,我现在这样做,但我有问题。我现在使用的服务器不在我的时区,TIMESTAMP(插入时)设置为系统(O/S)时间。不是UTC时间。

为什么不:

SET time_zone = '+00:00'; 

修复插入TIMESTAMP值?我如何确保MySQL服务器将时间戳默认为UTC?

解决:

这实在是令人困惑,因为MySQL的自动转换和显示TIMESTAMP的数据库,以目前的时区,所以我所有的时间戳转换并显示到系统时区。实际上,所有TIMESTAMPS存储为UTC。所以如果你去:

SET SESSION time_zone = '+00:00'; SELECT * FROM what_ever_table; 

它会显示在该时区的时间戳。

+0

可能的重复http://stackoverflow.com/questions/4562456/mysql-setting-time-zone-in-my-cnf-options-file – Bryan

+2

@BryanMoyles号我不是所有者MySQL服务器,所以我不能更改配置文件。 – user1627928

回答

-2

MySQL在插入/更新值时不关心时区。它看到的只是时间/日期值和字符串。其标准日期格式中不包含时区数据:yyyy-mm-dd hh:mm:ss。当您检索数据并想格式化数值时,时区只会进入画面。使用convert_tz()函数

+1

我不明白。当我插入记录时:'timestamp \t \t \t否\t CURRENT_TIMESTAMP'它使用系统(O/S)时区设置日期时间。这与UTC不同。但我希望它是UTC。 – user1627928

+0

如果我为我插入当前日期/时间“2012-10-25 09:00:00”,mysql应该如何知道这是gmt-6,而不是来自其他时区的日期?标准的mysql日期字符串中没有tz数据。您可以将tz含义附加到存储的日期/时间值。 –

+2

“mysql应该如何知道这是gmt-6,而不是来自某个其他时区的日期?”因为它使用SYSTEM的时区。你在说什么。 – user1627928