[英]time zone problem mysql
我的服务器在美国,在英国。
我使用默认的CURRENT_TIMESTAMP将时间戳值存储在mysql服务器上。 因此,将条目添加到我的表中时,它们会加上当前时间。 这是服务器时间(美国),然后由mysql转换为UTC。
检索值时,我希望它们显示在当前时区(英国)中。 因此,在我的PHP中,我使用以下函数来设置当前时区:
mysql_query("SET time_zone = timezone;");
当我要求mysql回显服务器和会话时区时,这似乎起作用,分别得到SYSTEM和-08:00。
但是,当我以后在同一PHP脚本中打印时间戳值时,它们将以美国时间输出。
在PHP中获取结果:
$result = mysql_query("SELECT ID,DateTime,Name,Comment,Location,Rating FROM table1 WHERE Latitude<$latup AND Latitude>$latdown AND Longitude<$lngup AND Longitude>$lngdown ORDER BY DateTime DESC")
while(($row = mysql_fetch_array( $ratingresult )) && ($i++ < 1)) {
echo "<tr><td>";
echo $row['DateTime'];
echo "</td><td>";
echo $row['Name'];
echo "</td><td>";
echo $row['Comment'];
echo "</td><td>";
echo $row['Location'];
echo "</td><td>";
echo $row['Rating'];
echo "</td><td>";
rate($row, $lat, $lng);
echo "</td></tr>";
}
任何帮助将非常感激!
请查看以下代码以执行正确的结果:
date_default_timezone_set('Europe/London');
mysql_query("SET time_zone = '".date('P')."';");
在MySQL中使用多个时区可能很棘手。
您必须非常谨慎地像这样在每个会话的基础上更改时区。 除了更改您从TIMESTAMP
字段中检索到的显示结果(实际上是自格林尼治标准时间01-01-1970 00:00:00以来的整数秒数),它还将更改插入DATETIME
字段中的数据(有效地是硬编码字符串) ),和/或如何评估NOW()
。
如果还不算太晚,并且您的应用程序允许,我建议将服务器/全局时区设置为英国(并在my.cnf中进行相应的更改):
例如mysql> SET GLOBAL time_zone = timezone;
来自http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html
或者,也可以只是全部转换为DATETIME
或使用DATETIME
-确保进行转换时会话所在的时区。
我已经通过使用PHP解决了这个问题。
$dt_obj = new DateTime($row['DateTime'], new DateTimeZone('America/Chicago'));
$dt_obj->setTimezone(new DateTimeZone('Europe/London'));
echo $dt_obj->format('d-m-Y H:i:s');
因为我在美国的服务器位于CST =芝加哥时区,所以它可以工作。 我还删除了所有尝试修改mysql时区的尝试。 我确定对于某些人来说,更改服务器时区是一种解决方案,但是我在共享服务器上,因此没有权限。
我现在的问题是-有没有办法让我的网站在全球范围内运作? 即通过检测用户运行时? 我认为这将需要JavaScript。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.