4

タイムゾーンに関連するTIMESTAMPフィールドタイプの動作は何ですか?

そのフィールドに挿入されたタイムスタンプ値はそのまま挿入されますか?

または、挿入されたタイムスタンプ値のタイムゾーンがサーバーの現地時間にあると想定し、UTCに変換しますか?

編集:

これが私のテストです

  • PHPのdate()とMySQLのSELECT NOW()の両方を実行したところ、ほぼ同じタイムスタンプが出力されています。両方の結果はUTC時間ではありません。

  • PHP date()から取得したTIMESTAMPフィールドの値を使用してテストテーブルに挿入してみました

  • PHP date()の値はUTCに変換されている必要があります。ただし、データベースに表示されるのはUTCではありません。TIMESTAMPフィールドの値はそのまま挿入されます。

4

2 に答える 2

4

TIMESTAMP 値は常に UTC として保存されます。

MySQL は、保存のために TIMESTAMP を現在のタイム ゾーンから UTC に変換し、取得のために UTC から現在のタイム ゾーンに戻します。

デフォルトのタイムゾーンはサーバーのタイムゾーンになり、接続で設定できます。これを参照してください。

詳細については、MySQL Docを参照してください。

例を通してこれを説明できます。mysql コンソールでクエリを実行してください。

mysql> CREATE TABLE `testtable` (
         `date_timestamp` TIMESTAMP NOT NULL,
         `date_datetime` DATETIME NOT NULL
       )
       ENGINE = InnoDB;
Query OK, 0 rows affected (0.06 sec)

mysql> SET time_zone = '+00:00';
Query OK, 0 rows affected (0.00 sec)

mysql> insert into testtable values(now(),now());
Query OK, 1 row affected (0.03 sec)

mysql> select * from testtable;
+---------------------+---------------------+
| date_timestamp      | date_datetime       |
+---------------------+---------------------+
| 2012-10-19 05:01:38 | 2012-10-19 05:01:38 |
+---------------------+---------------------+
1 row in set (0.00 sec)

mysql> SET time_zone = '+05:30';
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> insert into testtable values(now(),now());
Query OK, 1 row affected (0.03 sec)

mysql> select * from testtable;
+---------------------+---------------------+
| date_timestamp      | date_datetime       |
+---------------------+---------------------+
| 2012-10-19 10:31:38 | 2012-10-19 05:01:38 |
| 2012-10-19 10:31:47 | 2012-10-19 10:31:47 |
+---------------------+---------------------+
2 rows in set (0.00 sec)
于 2012-10-18T11:29:33.143 に答える
-4

TIMESTAMPT 値はそのまま挿入されます。

于 2012-10-18T09:39:49.937 に答える