0

在我的数据库中,updateTime 设置为 TIMESTAMP 和 CURRENT_TIMESTAMP。但是当我显示数据时,数据库中记录的时间不是我当地的时区,而是3小时后。如何通过转换此 SQL 语句来减去这 3 个小时?我可以在此语句中以某种方式使用 CONVERT_TZ 吗?我不知道该怎么做。

SELECT updates.updateID, updates.windowStatus, updates.onDeck, updates.updateComments,    TIME_FORMAT(`updateTime`,'%r') AS showtime FROM updates ORDER BY updates.updateID DESC LIMIT 1
4

1 回答 1

1

服务器时区可以由每个客户端(每个连接)设置,以便在 UTC 以外的其他 TZ 中接收数据。为此,您只需使用:

SET time_zone = timezone;

的值timezone可以作为 UTC 的偏移量('+10:00'、'-6:00'、...)或命名时区(例如 'Europe/Helsinki'、'US/Eastern' , 或“MET”)。因此,如果我没记错的话,您可以设置自己的 TZ 以便在“+3:00”接收您的数据。

考虑到 mysql 服务器完成的这个偏移量只影响NOW(),CURTIME()和存储在列中和从TIMESTAMP列中检索的值(这是您正在寻找的)。

您可以使用其他方式

SELECT @@global.time_zone, @@session.time_zone;

获取全球和客户特定的时区。

在以下位置有更多相关信息(这实际上是我所写内容的总结):Time-zone support (mysql.com)

在你的情况下,你可以有这样的事情:

<?php
mysql_select_db($database_casualconnnect, $casualconnnect); 

$set_tz_query = "SET time_zone = '+1:00'";
mysql_query($set_tz_query, $casualconnnect) or die(mysql_error()); 

$query_Recordset2 = "SELECT updates.updateID, updates.windowStatus, 
    TIME_FORMAT(`updateTime`,'%r') AS showtime, updates.onDeck, updates.updateComments 
    FROM updates ORDER BY updates.updateID DESC LIMIT 1"; 

$Recordset2 = mysql_query($query_Recordset2, $casualconnnect) or die(mysql_error()); 
$row_Recordset2 = mysql_fetch_assoc($Recordset2); $totalRows_Recordset2 = mysql_num_rows($Recordset2); 

?>
于 2013-09-05T02:53:54.617 回答