バージョン 2.7.6 より前の LindormTable は、Java 仮想マシン (JVM) のタイムゾーンである UTC+8 ゾーンのみをサポートしています。 LindormTable 2.7.6 以降のバージョンでは、クロス タイムゾーン機能が提供されています。このトピックでは、時間データが期待どおりに返されるように、LindormTable 接続のタイムゾーンを指定する方法について説明します。
背景情報
Lindorm は、TIMESTAMP、DATE、および TIME データ型をサポートしています。 TIMESTAMP 型のみがタイムゾーンに関連しています。次の表に、上記のデータ型を示します。
データ型 | 形式 | データ型とタイムゾーンの関係 |
DATE |
| 日付文字列。タイムゾーンとは無関係です。 |
TIME |
| 時間文字列。タイムゾーンとは無関係です。 |
TIMESTAMP | 年、月、日、時、分、秒、ミリ秒を 나타내는 形式が使用されます。次の形式がサポートされています。
|
|
前提条件
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');タイムゾーンを照会および変更できます。
タイムゾーンを照会します。
SELECT @@time_zone;結果例:
+-------------+ | @@time_zone | +-------------+ | +08:00 | +-------------+この結果は、現在のタイムゾーンが UTC+8 であることを 나타냅니다。
現在のタイムゾーンの時間データ形式を照会します。
SELECT * FROM tb;結果例:
+------+------------+----------+-------------------------+ | p1 | c1 | c2 | c3 | +------+------------+----------+-------------------------+ | 1 | 2024-08-30 | 08:11:15 | 2024-08-30 08:11:15.354 | +------+------------+----------+-------------------------+タイムゾーンを UTC に変更します。
SET @@time_zone='UTC';タイムゾーンが期待どおりに変更されたかどうかを確認します。
SELECT @@time_zone;結果例:
+-------------+ | @@time_zone | +-------------+ | UTC | +-------------+タイムゾーンが期待どおりに変更されたかどうかを確認するために、現在のタイムゾーンの時間データ形式を再確認します。
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 |
|
接続コードの例
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 |
| このパラメーターは、ビジネスが実行されているシステム タイムゾーンに設定することをお勧めします。 |
サンプルコード:
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 |
|
loc | Local |
説明 このパラメーターは、 |
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())
}