2

time_scan_starttime_scan_end(タイムスタンプ フィールド)の 2 つのフィールドを取得しました。

PDO を使用して MySQL への接続を開くときは、SET NAMES utf8,time_zone = "+0:00";.

さて、MySQL でクエリを実行するとき、UTC 時間WHERE time_scan_start >= UTCを使用する必要がありますか、それとも PHP ローカル ゾーンを使用する必要がありますか? MySQL はそれ自体で調整を行いますか?

gmdate と date でいくつかのテストを行いましたが、機能する場合もあれば、機能しない場合もあります。

ありがとう

4

2 に答える 2

2

フィールドと比較する場合TIMESTAMPは、サーバーのタイムゾーンで比較値を使用する必要があります。サーバーのタイムゾーンは、次の方法で決定できます。

SELECT @@time_zone;

したがって、実行した場合

SET NAMES time_zone = "+0:00";

次に、UTC ベースの値を使用します。

これは、TIMESTAMPフィールドが UTC で MySQL に保存され、表示 (または比較) の前にサーバーのタイムゾーンに変換されるためです。

注: 1DATETIMEつまたは複数のTIMEフィールドと比較する場合は、値がフィールドに挿入されたときに使用されたのと同じタイムゾーンで比較値を使用する必要があります。

これはDATETIMETIMEフィールドがタイムゾーン情報なしで MySQL に保存され、表示 (または比較) の前に変換されないためです。

于 2012-11-02T23:49:13.077 に答える
2

MySQLDATETIMEはタイムゾーンについて何も知りません。したがって、どのタイムゾーンを「デフォルト」 (通常は UTC) にするかを決定し、必要に応じてそのタイムゾーンを使用してすべてのタイムスタンプを保存するCONVERT_TZ必要があります。

次に、検索でも同じことを行います。つまり、値を検索で使用する前に UTC に変換します。

于 2012-11-02T23:56:15.413 に答える