すべてのプロダクト
Search
ドキュメントセンター

Lindorm:LindormTable 接続のタイムゾーンを指定する

最終更新日:Jan 14, 2025

バージョン 2.7.6 より前の LindormTable は、Java 仮想マシン (JVM) のタイムゾーンである UTC+8 ゾーンのみをサポートしています。 LindormTable 2.7.6 以降のバージョンでは、クロス タイムゾーン機能が提供されています。このトピックでは、時間データが期待どおりに返されるように、LindormTable 接続のタイムゾーンを指定する方法について説明します。

背景情報

Lindorm は、TIMESTAMP、DATE、および TIME データ型をサポートしています。 TIMESTAMP 型のみがタイムゾーンに関連しています。次の表に、上記のデータ型を示します。

データ型

形式

データ型とタイムゾーンの関係

DATE

yyyy-mm-dd 形式が使用されます。これは、年、月、日を 나타냅니다。例: 2024-08-30

日付文字列。タイムゾーンとは無関係です。

TIME

hh:mm:ss 形式が使用されます。これは、時、分、秒を 나타냅니다。例: 08:11:15

時間文字列。タイムゾーンとは無関係です。

TIMESTAMP

年、月、日、時、分、秒、ミリ秒を 나타내는 形式が使用されます。次の形式がサポートされています。

  • yyyy-mm-dd hh:mm:ss.SSS。ミリ秒単位の精度です。例: 2024-08-30 08:11:15.354

  • LONG(long integer)型のエポック タイムスタンプ。例: 1724976675345。単位: ミリ秒。

  • 日付と時刻の文字列。タイムゾーンに関連しており、現在のタイムゾーンの時刻と日付を 나타냅니다。

  • LONG 型のタイムスタンプ文字列。 1970 年 1 月 1 日 00:00:00 UTC から経過したミリ秒数を 나타냅니다。単位: ミリ秒。

前提条件

LindormTable のバージョンが 2.7.6 以後であること。 LindormTable のバージョンを表示またはアップグレードする方法については、LindormTable のリリースノートLindorm インスタンスのマイナー エンジン バージョンをアップグレードするをご参照ください。

重要

Lindorm コンソールでインスタンスの LindormTable バージョンを 2.7.6 以降にアップグレードできない場合は、テクニカルサポート(DingTalk ID: s0s3eg3)にお問い合わせください。

制限事項

MySQL プロトコルのみで、LindormTable 接続のタイムゾーンを指定できます。詳細については、MySQL プロトコルを使用してアプリケーションを開発する(推奨)をご参照ください。

タイムゾーンを指定する

重要
  • Lindorm のデフォルトのタイムゾーンは UTC+8 です。

  • 指定したタイムゾーンは、現在の LindormTable 接続に対してのみ有効です。

SET 構文を使用して、現在の LindormTable 接続のタイムゾーンを指定します。指定したタイムゾーンは、現在の LindormTable 接続に対してのみ有効です。構文の詳細については、セッション変数をご参照ください。

  • 現在の LindormTable 接続の UTC タイムゾーンを指定します。

    SET @@time_zone='UTC';
  • 現在の LindormTable 接続の +08:00 タイムゾーンを指定します。

    SET @@time_zone='+08:00';
  • 現在の Lindorm 接続に上海の現地時間である上海タイムゾーンを指定します。

    SET @@time_zone='Asia/Shanghai';

現在のタイムゾーンを照会する

SELECT @@time_zone;

MySQL コマンドライン ツール

MySQL コマンドライン ツールを使用して LindormTable に接続する方法については、MySQL クライアントを使用して LindormTable に接続して使用するをご参照ください。

この例では、次のステートメントを実行して、tb という名前のテーブルを作成し、データを入力します。

-- テーブルを作成します。
CREATE TABLE tb(p1 int, c1 date, c2 time, c3 timestamp(3), PRIMARY KEY(p1));

-- テーブルにデータを挿入します。
UPSERT INTO tb(p1,c1,c2,c3) VALUES(1, '2024-08-30', '08:11:15', '2024-08-30 08:11:15.354');

タイムゾーンを照会および変更できます。

  1. タイムゾーンを照会します。

    SELECT @@time_zone;

    結果例:

    +-------------+
    | @@time_zone |
    +-------------+
    | +08:00      |
    +-------------+

    この結果は、現在のタイムゾーンが UTC+8 であることを 나타냅니다。

  2. 現在のタイムゾーンの時間データ形式を照会します。

    SELECT * FROM tb;

    結果例:

    +------+------------+----------+-------------------------+
    | p1   | c1         | c2       | c3                      |
    +------+------------+----------+-------------------------+
    |    1 | 2024-08-30 | 08:11:15 | 2024-08-30 08:11:15.354 |
    +------+------------+----------+-------------------------+
  3. タイムゾーンを UTC に変更します。

    SET @@time_zone='UTC';
  4. タイムゾーンが期待どおりに変更されたかどうかを確認します。

    SELECT @@time_zone;

    結果例:

    +-------------+
    | @@time_zone |
    +-------------+
    | UTC         |
    +-------------+
  5. タイムゾーンが期待どおりに変更されたかどうかを確認するために、現在のタイムゾーンの時間データ形式を再確認します。

    SELECT * FROM tb;

    結果例:

    +------+------------+----------+-------------------------+
    | p1   | c1         | c2       | c3                      |
    +------+------------+----------+-------------------------+
    |    1 | 2024-08-30 | 08:11:15 | 2024-08-30 00:11:15.354 |
    +------+------------+----------+-------------------------+

    DATE 型と TIME 型の c1 列と c2 列のデータ形式は、タイムゾーンとは無関係であるため変更されません。 TIMESTAMP 型の c3 列のデータ形式は、UTC タイムゾーンの日付と時刻に変更されます。

Java

Java Database Connectivity (JDBC) を使用して LindormTable に接続する方法については、Java JDBC API を使用してアプリケーションを開発するをご参照ください。

ビジネスが UTC+8 タイムゾーンを使用していないリージョンで実行されている場合は、接続文字列に forceConnectionTimeZoneToSession=true 設定を追加して、接続タイムゾーンを指定することをお勧めします。

パラメーター

値の例

説明

connectionTimeZone

UTC

接続タイムゾーンを指定します。デフォルト値は、クライアントの JVM のタイムゾーンです。これは、Java プログラムを実行する仮想マシンで使用されるデフォルトのタイムゾーンでもあります。特別な要件がない場合は、このパラメーターを無視します。

forceConnectionTimeZoneToSession

true

set time_zone ステートメントを使用して、サーバーの connectionTimeZone パラメーターの値を指定します。ビジネスが UTC+8 タイムゾーンを使用していないリージョンで実行されている場合は、このパラメーターを追加することをお勧めします。

接続コードの例

String url = "jdbc:mysql://ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com:33060/" + database + "?sslMode=disabled&allowPublicKeyRetrieval=true&useServerPrepStmts=true&useLocalSessionState=true&rewriteBatchedStatements=true&cachePrepStmts=true&prepStmtCacheSize=100&prepStmtCacheSqlLimit=50000000&forceConnectionTimeZoneToSession=true";
Properties properties = new Properties();
properties.put("user", username);
properties.put("password", password);

//確立された接続を取得します。
Connection connection = DriverManager.getConnection(url, properties);

Python

mysql-connector-python ドライバーを使用して LindormTable に接続する方法については、mysql-connector-python を使用してアプリケーションを開発するをご参照ください。

ビジネスが UTC タイムゾーンを使用するリージョンで実行されている場合は、接続文字列に time_zone パラメーターを追加して、接続タイムゾーンを変更する必要があります。たとえば、接続文字列に time_zone='UTC' 文字列を追加します。

パラメーター

値の例

説明

time_zone

'UTC'

このパラメーターは、ビジネスが実行されているシステム タイムゾーンに設定することをお勧めします。 set time_zone ステートメントを使用して、サーバーのタイムゾーンを指定できます。

サンプルコード:

connection = mysql.connector.connect(host='<MySQL 用の LindormTable エンドポイント>', port=33060, user='<ユーザー名>', passwd='<パスワード>', database='<データベース名>', time_zone='<タイムゾーン>')

Go

Golang MySQL Driver を使用して LindormTable に接続する方法については、Go を使用してアプリケーションを開発するをご参照ください。

ビジネスが UTC タイムゾーンを使用するリージョンで実行されている場合は、接続文字列に loc=Locall&time_zone=%27UTC%27 設定を追加する必要があります。

パラメーター

値の例

説明

parseTime

true

parseTime パラメーターを true に設定すると、DATE 型と TIMESTAMP 型の時間データは time.Time 型の時間データとして返されます。

loc

Local

time.Time 型の時間データが解析されるタイムゾーンを指定します。 Local の値は、システム タイムゾーンを 나타냅니다。

説明

このパラメーターは、parseTime パラメーターを true に設定した場合にのみ有効です。

time_zone

%27UTC%27

ビジネスが実行されているシステム タイムゾーンを指定します。

詳細については、システム変数 をご参照ください。

サンプルコード:

urlString := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?timeout=%s&parseTime=true&loc=Local", user, password, host, port, database, connectTimeout)
timeZoneValue := url.QueryEscape("'UTC'")
urlString = urlString + "&time_zone=" + timeZoneValue
db, err := sql.Open("mysql", urlString)
if err != nil {
	panic(err.Error())
}