我正在研究一个简单的DB管理,日期时间类型,期望将时间转换为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中的相同值。
有人能说出它的工作原理吗?我不确定我的问题是错了,还是有什么令人困惑的地方?
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'))
在系统和MySQL上正确设置时区,无需进行任何转换。
然而,DATETIME
就像拍摄本地时钟的照片,而TIMESTAMP
就像记录当前时刻的UTC。
也就是说,在不同时区的人,当阅读DATETIME时,会看到你在时钟上看到的内容,但当阅读TIMESTAMP时,会发现不同的值。