0

MySQL では、ON UPDATE CURRENT_TIMESTAMP 指定でフィールドが作成されました。これにより、レコードの更新日がサーバーのタイムゾーンで保存されます。この時間をUTC時間に変換したい。

サーバーは、サーバー管理または MySQL 管理にアクセスできないアカウントでホストされているため、サーバーまたは MySQL のタイムゾーンを、コマンド ライン インターフェイスまたはスタートアップ ファイルまたはその他の方法で直接設定することはできません。これには、SET time_zone コマンドまたは my.cnf ファイルが含まれます。

ON UPDATE UTC_TIMESTAMP を使用する提案も見つけましたが、これは構文エラーを引き起こし、ドキュメントではサポートされていません。

だから私が今やろうとしているのは、サーバーの現在のタイムゾーンに保存されているON UPDATE CURRENT_TIMESTAMPによって保存された値を変換するselect句を見つけて、それをUTC時間に変換することです。

理想的には、この句はサーバーのタイムゾーンを検出して、値がハードコーディングされず、サーバーが設定されているタイムゾーンに関係なく機能するようにします。

4

1 に答える 1

0

誰もこの質問に答えていないので、私が最終的に使用した回避策は次のとおりです。

私はphpからmySQlにアクセスするので、PHPを使用してサーバー時間からUTCまでの秒数の差を計算し、SQLステートメントでその量を差し引いて問題を解決しました。

サーバー時刻から utc までの差を秒単位で計算する PHP 関数は次のとおりです。

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

1970 年 1 月 1 日からの秒単位で utc の時間を選択するために PHP で SQL ステートメントを作成した方法を次に示します。

$sql .= "SELECT TIMESTAMPDIFF(SECOND, '1970-01-01', myServerTimeStampField)-".utcOffset()." AS timeInUTCSeconds FROM myTable";
于 2013-10-22T17:09:57.713 に答える