0

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

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

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

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

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

4

1 回答 1

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";
于 2013-10-22T17:09:57.713 回答