繁体   English   中英

时区问题mysql

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM