将使用ON UPDATE CURRENT_TIMESTAMP设置的值转换为UTC

时间:2013-10-18 15:12:00

标签: mysql

在MySQL中,使用ON UPDATE CURRENT_TIMESTAMP指定创建了一个字段。这会将记录更新日期保存在服务器的时区中。我想将此时间转换为UTC时间。

服务器托管在一个无法访问服务器管理或MySQL管理的帐户中,因此我无法通过命令行界面或启动文件直接在服务器或MySQL上设置时区或任何其他方式。这包括SET time_zone命令或my.cnf文件。

我还发现了使用ON UPDATE UTC_TIMESTAMP的建议,但发现这会产生语法错误,文档中不支持。

所以我现在要做的是找到一个select子句,它转换由ON UPDATE CURRENT_TIMESTAMP保存的值,该值保存在服务器的当前时区,并将其转换为UTC时间。

理想情况下,此子句将检测服务器的时区,因此该值不是硬编码的,并且可以与服务器设置的任何时区一起使用。

1 个答案:

答案 0 :(得分:0)

由于此处没有人回答这个问题,我最终使用了解决方法:

由于我从php访问mySQl,我使用php通过计算从服务器时间到UTC的秒数差异来解决问题,然后在SQL语句中减去该数量。

这是用于计算从服务器时间到utc的秒数差异的PHP函数:

function utcOffset() {
    $serverTime = new DateTime('NOW');
    return $serverTime->getOffset();
}

以下是我如何在PHP中构建SQL语句,以便在自1970年1月1日起以秒为单位选择utc中的时间:

$sql .= "SELECT TIMESTAMPDIFF(SECOND, '1970-01-01', myServerTimeStampField)-".utcOffset()." AS timeInUTCSeconds FROM myTable";