首页 > 解决方案 > 如何绕过在奇怪时区拥有 mySQL 数据库的主机

问题描述

我正在与一家接管了我以前的托管公司的无能托管公司作斗争。除了他们在迁移中破坏的所有其他内容之外,mySQL 数据库设置为澳大利亚时间(不确定哪个城市)。我可以通过添加一个 php.ini 文件来设置 PHP 环境时区,但这仍然会使数据库处于奇怪的状态。

我认为从逻辑上讲,主机的数据库应该在 UTC 上,并且他们应该安装 mysql 时区表(但遗憾的是,这将需要数周的时间来纠缠他们的“帮助”服务台才能到达任何地方)。当然,我无权设置任何 SQL 变量(如果没有时区表,这一切都是徒劳的)。

现在,我可以通过偏移来解决这个问题 - 我知道主机在 +10 小时,我需要 +12 小时,但是夏令时这一切都会出错(澳大利亚的和我当地的不会同时改变时间)。

而且我运行一个预订系统,所以让用户在过去 1 小时预订东西不会很顺利......

所以 - 因为我有 PHP 环境工作,我的解决方案是从 PHP 环境中获取偏移量

$d = new DateTime();
echo $d->format('Z');

这给了我以秒为单位的偏移量——除以 60*60,我们得到我的时区的当前偏移量。我相信这会随着夏令时而改变。

so I get an offset of +12 hours

现在我可以在 SQL 中应用它,因为 UTC_timestamp() 函数有效,我可以做到

select CONVERT_TZ (UTC_TIMESTAMP, '+0:00', '+12:00');

获取当前日期和时间。

绕过无能的托管公司应该这么难吗?有没有更简单的方法??

标签: phpmysqlhostingtimezone-offset

解决方案


推荐阅读