【发布时间】:2017-11-24 22:43:31
【问题描述】:
Timestamp 有没有办法插入 UTC 时间而不是本地时间(System_time_Zone)。
根据 MySQL 文档 - "MySQL 将 TIMESTAMP 值从当前时区转换为 UTC 进行存储,并从 UTC 转换回当前时区进行检索。"
当我在时间戳数据类型中插入 now() 时,保存的值是本地时间,与 Datetime 数据类型相同。 Datetime 的日期值似乎是静态的,但 TimeZone 会在 Session 时区更新时不断更新。
MySQL Workbench 6.3 查询 - 我目前在 EDT 时区。
desc datedemo ;
--------------------------------------------------
| mydatetime | 'datetime' |
--------------------------------------------------
| mytimestamp |'timestamp' |
--------------------------------------------------
| utcdate | datetime |
--------------------------------------------------
SELECT @@global.time_zone, @@session.time_zone;
--------------------------------------------------
| @@global.time_zone|'@@session.time_zone'
--------------------------------------------------
| SYSTEM | SYSTEM |
--------------------------------------------------
insert into datedemo values (now(), now(),UTC_TIMESTAMP());
select * from datedemo
----------------------------------------------------------------------
| mydatetime | mytimestamp | utcdate
----------------------------------------------------------------------
| 2017-06-21 16:20:28| 2017-06-21 16:20:28 |2017-06-21 20:20:28
----------------------------------------------------------------------
SET SESSION TIME_ZONE = "+00:00"; // UTC time ZONE
select * from datedemo
----------------------------------------------------------------------
| mydatetime | mytimestamp | utcdate
----------------------------------------------------------------------
| 2017-06-21 16:20:28| 2017-06-21 20:20:28 |2017-06-21 20:20:28
----------------------------------------------------------------------
timeStamp 数据类型在哪里保存 UTC 时间?据我了解,它只是使用会话 timeZone 并相应地转换时间,这也是由 Datetime 完成的,唯一的区别是 datetime 是静态的,但 TimeStamp 使用客户端 timeZone 不断变化。
我可能完全错了,但如果能回答这个问题,我将不胜感激。
【问题讨论】:
标签: mysql date datetime timezone timestamp