【发布时间】:2016-12-27 15:26:19
【问题描述】:
我正处于构建 mysql 表的早期阶段,该表将保存来自两个时区的数据。我的机器和服务器都在 America/Los_Angeles 时区。时区表没有加载到 mysql 服务器中,但是在这个站点的其他地方,我已经读过这不是必需的,只要 php 处理查询 - php 会将 UTC 偏移量写入 mysql。 Mysql 数据类型是 TIMESTAMP。已使用包含以下语句的 php 脚本插入示例数据:
if($company == 'HOS_CIN' or $company == 'HOS_FER') {
date_default_timezone_set("America/New_York");
}
然后使用两个 php 脚本在浏览器中显示数据。一份包括上述陈述,一份没有。带有语句的显示时间为美国东部标准时间中午,而没有声明的显示时间为太平洋标准时间中午。如果mysql存储了UTC偏移量,显示的时间不应该有三个小时的差异吗?
php版本5.3.3,mysql版本5.0.95
【问题讨论】:
-
1) 不,如果你不告诉 PHP 将不会打印 UTC 时区(例如,将时区设置为 UTC)2)
TIMESTAMP从/到 MySQL 服务器的时区转换在存储/检索日期时,您似乎并不关心设置一个已知日期。 -
这不就是date_default_timezone_set的目的吗?
-
不确定您现在的意思,如果您选择
America/New_York,它将使用纽约时间,而不是UTC。 MySQL 是一个不同的程序,有时甚至可以在不同的计算机上运行。它不会关心 PHP 时区。 -
本网站和其他网站的其他地方,建议不一致。一些建议将时间戳存储为整数,而另一些建议当数据类型设置为时间戳时,mysql 会将在 php 脚本中启动的日期和时间数据转换并存储为 UTC。我在 php 中选择命名时区的原因是为了预测由可恶的夏令时引起的冲突。提到的查询是从 php 中的 mysqli_query 语句发出的。
-
我并不是说你的方法是好是坏,只是你没有考虑所有信息(例如 Mysql 时区)并且你做出断言(例如“php 将编写UTC 偏移到 mysql") 不受代码支持。