在我的数据库中,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
答案 0 :(得分:1)
服务器时区可以由每个客户端(每个连接)设置,以便接收除UTC之外的其他TZ中的数据。为此,您只需使用:
SET time_zone = timezone;
timezone
的值可以作为UTC的偏移量(' +10:00',' -6:00',...)或as一个指定的时区(例如' 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);
?>