我需要将一些表从 MySQL 数据库移动到 PostgreSQL。 所以我通过检查系统变量检查了MySQL服务器使用哪个时区:
system time zone CET
CET
- 据我所知 - 与 CEST
相比 - 永远不会超过 UTC+1
。
CEST
在夏季 UTC+2
。根据http://en.wikipedia.org/wiki/Central_European_Time
但是 SELECT CURRENT_TIMESTAMP()
实际上返回 CEST
时间(UTC+2
):
为什么?
最佳答案
So i've checked, which time zone is MySQL server using by checking system variable
你是怎么做到的?
请尝试这个查询并告诉我结果:
SELECT @@global.time_zone, @@session.time_zone;
可以有三种类型的结果。
- 系统
这意味着,MySQL 使用您操作系统的时区设置
- 类似“+01:00”之类的东西 值(value)
这是与 UTC(协调世界时)的时差
- 类似“欧洲/柏林”的内容
这与上面的基本相同,但是您已经在 MySQL 中填充了时区表。
您会看到,datetime
值在 MySQL 内部存储为 UTC 值。
因此,当您在表中插入“2011-03-30 12:34:56”并将 SYSTEM 变量设置为“Europe/Berlin”/“+01:00”时,MySQL 会计算“2011-03-”的整数表示30 11:34:56',将值保存在您的数据库中。当您查询日期时间值时,MySQL 会再次添加该小时(假设您的时区设置未更改)并为您提供值“2011-03-30 12:34:56”
关于MySQL - CET 和 CEST 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5488694/