我正在开发一个简单的数据库管理,日期时间类型,期望将时间转换为UTC以便存储&检索时转换回客户区的本地时间。
但它不是那样的。
我的查询在这里:
insert into table_name (date) values (now())
我现在的时间是:
2015-03-23 18:42:43 (local time, IST +5:30)
我期待2015-03-23 13:12:43在数据库中但不是这样,它只是存储相同而不是转换为UTC。
即使在检索它时,也只是提供存储在DB中的相同值。
有人能说出它是如何运作的吗?我不确定我的查询是否错误或是否存在令人困惑的事情?
答案 0 :(得分:0)
IST比UTC早+5.30小时,因此在将数据IST时间存储到UTC时,您可能需要使用convert_tz
功能。或者更好地将mysql服务器设置为UTC时区。
对于手动转换,它可以作为
mysql> select convert_tz('2015-03-23 18:42:43','+00:00','-05:30') as utc;
+---------------------+
| utc |
+---------------------+
| 2015-03-23 13:12:43 |
+---------------------+
1 row in set (0.00 sec)
所以插入将是
insert into table_name
(date)
values
(convert_tz(now(),'+00:00','-05:30'))
答案 1 :(得分:0)
在系统和MySQL上正确设置您的时区,您无需进行任何转换。
但是,DATETIME
就像是拍摄本地时钟的照片,而TIMESTAMP
就像记录当前时刻的UTC一样。
也就是说,在阅读DATETIME时,不同时区的某个人会看到您在时钟上看到的内容,但在阅读TIMESTAMP时会看到不同的值。