📣
TiDB Cloud Essential はパブリックプレビュー中です。このページは自動翻訳されたものです。原文はこちらからご覧ください。

タイムゾーンのサポート

TiDBのタイムゾーンは、システム変数time_zoneによって決定されます。セッションレベルまたはグローバルレベルで設定できます。デフォルト値はtime_zoneで、 SYSTEMですSYSTEMに対応する実際のタイムゾーンは、TiDBクラスタのブートストラップが初期化される際に設定されます。詳細なロジックは次のとおりです。

  1. TiDB はTZ環境変数の使用を優先します。
  2. TZ環境変数が失敗した場合、TiDB は/etc/localtimeソフト リンクからタイム ゾーンを読み取ります。
  3. 上記の両方の方法が失敗した場合、TiDB はシステムタイムゾーンとしてUTC使用します。

タイムゾーン設定をビュー

グローバル、クライアント固有、およびシステムのタイムゾーンの現在の値を表示するには、次のステートメントを実行します。

SELECT @@global.time_zone, @@session.time_zone, @@global.system_time_zone;

タイムゾーンを設定する

TiDB では、 time_zoneシステム変数の値は次のいずれかの形式で設定できます。

  • SYSTEM (デフォルト値) は、タイム ゾーンがシステムのタイム ゾーンと同じであることを示します。
  • UTC オフセット'+10:00'または'-6:00'など)。
  • 'Europe/Helsinki''US/Eastern''MET'などの名前付きタイムゾーン。

ニーズに応じて、次のように TiDB のタイムゾーンをグローバル レベルまたはセッション レベルで設定できます。

  • TiDB のタイムゾーンをグローバル レベルで設定します。

    SET GLOBAL time_zone = ${time-zone-value};

    たとえば、グローバル タイム ゾーンを UTC に設定します。

    SET GLOBAL time_zone = 'UTC';
  • セッション レベルで TiDB のタイム ゾーンを設定します。

    SET time_zone = ${time-zone-value};

    たとえば、現在のセッションのタイムゾーンを US/Pacific に設定します。

    SET time_zone = 'US/Pacific';

タイムゾーン設定の影響を受ける関数とデータ型

現在のセッションのタイムゾーン設定は、 NOW()およびCURTIME()関数によって返される値など、タイムゾーンに依存する時間値の表示と解釈に影響します。タイムゾーン間の変換にはCONVERT_TZ()関数を使用します。UTC に基づくタイムスタンプを取得するにはUTC_TIMESTAMP()関数を使用します。これにより、タイムゾーン関連の問題を回避できます。

TiDBでは、データ型TIMESTAMPの表示値はタイムゾーン設定の影響を受けます。これは、データ型TIMESTAMPがリテラル値とタイムゾーン情報を使用しているためです。データ型DATETIMEDATETIMEなどはタイムゾーン情報を持たないため、タイムゾーンの変更による影響を受けません。

例えば:

create table t (ts timestamp, dt datetime);
Query OK, 0 rows affected (0.02 sec)
set @@time_zone = 'UTC';
Query OK, 0 rows affected (0.00 sec)
insert into t values ('2017-09-30 11:11:11', '2017-09-30 11:11:11');
Query OK, 1 row affected (0.00 sec)
set @@time_zone = '+8:00';
Query OK, 0 rows affected (0.00 sec)
select * from t;
+---------------------|---------------------+ | ts | dt | +---------------------|---------------------+ | 2017-09-30 19:11:11 | 2017-09-30 11:11:11 | +---------------------|---------------------+ 1 row in set (0.00 sec)

この例では、タイムゾーンの値をどのように調整しても、データ型DATETIMEの値は影響を受けません。ただし、データ型TIMESTAMPの表示値はタイムゾーンの変更を反映しています。実際、データベースに保存されているデータ型TIMESTAMP値は変更されていませんが、タイムゾーンの設定に応じて表示が異なります。

タイムゾーン設定に関する重要な考慮事項

  • TIMESTAMPDATETIME値の変換中にはタイムゾーンが関係し、現在のセッションのtime_zoneに基づいて処理されます。
  • データ移行では、プライマリ データベースとセカンダリ データベースのタイム ゾーン設定が一致しているかどうかに特に注意する必要があります。
  • 正確なタイムスタンプを取得するには、ネットワークタイムプロトコル(NTP)または高精度時間プロトコル(PTP)サービスを使用して信頼性の高いクロックを設定することを強くお勧めします。NTPサービスの確認方法については、 NTPサービスを確認してインストールする参照してください。
  • 夏時間を採用しているタイムゾーンを使用すると、特にそれらのタイムスタンプを使用して計算を実行するときに、タイムスタンプがあいまいになったり、タイムスタンプが存在しなくなったりする可能性があることに注意してください。
  • MySQLはmysql_tzinfo_to_sql使用して、オペレーティングシステムのタイムゾーンデータベースをmysqlデータベースのテーブルに変換します。一方、TiDBはオペレーティングシステムのタイムゾーンデータベースからタイムゾーンデータファイルを直接読み取り、Goプログラミング言語に組み込まれたタイムゾーン処理機能を活用します。

参照

このページは役に立ちましたか?