日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

如何設置連接時區

寬表引擎2.7.6版本之前僅支持東八時區。 2.7.6版本之后,寬表引擎支持了跨時區特性。本文介紹如何設置當前連接的時區,以確保時間數據與您的期望一致。

背景信息

目前Lindorm支持三種時間類型,其中TIMESTAMP類型和時區相關,DATE、TIME類型和時區無關。

數據類型

說明

時區特性

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, 精確到毫秒。

  • epoch毫秒時間戳,類型為長整型,例如1724976675345。

  • 日期+時間字符串,與時區相關,表示當前時區的時間+日期。

  • 長整型的毫秒時間戳表示從UTC時區1970年1月1日00:00:00開始的毫秒數。

前提條件

寬表引擎為2.7.6及以上版本。如何查看或升級當前版本,請參見寬表引擎版本說明升級小版本

重要

如果您的寬表引擎無法通過控制臺升級至2.7.6及以上版本,請聯系Lindorm技術支持(釘釘號:s0s3eg3)。

使用限制

僅MySQL協議支持設置連接時區。MySQL協議連接方式,請參見使用MySQL協議(推薦)。

設置時區

重要
  • Lindorm默認時區為東八時區。

  • 設置連接時區僅對當前連接生效。

您可以通過SET語法設置當前連接的時區,僅對當前連接生效。SET語法的詳細說明,請參見會話變量

  • 設置當前連接時區為UTC時區。

    SET @@time_zone='UTC';
  • 設置當前連接時區為+08:00時區。

    SET @@time_zone='+08:00';
  • 設置當前連接時區為上海時區(即上海的本地時間)。

    SET @@time_zone='Asia/Shanghai';

查詢當前時區

SELECT @@time_zone;

示例

MySQL命令行

通過MySQL命令行連接寬表引擎,請參見通過MySQL命令行連接寬表引擎。

假設表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      |
    +-------------+

    可以看到當前時區為東八區。

  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和DATE類型的c1、c2列由于與時區無關,因此數據格式無變化。TIMESTAMP類型的c3列中的數據已變為UTC時區下的日期時間。

Java

Java JDBC連接方式,請參見基于Java JDBC接口的應用開發。

當業務運行在非東八區時,建議您在連接串中添加參數forceConnectionTimeZoneToSession=true來設置連接時區。具體說明如下:

參數

示例值

說明

connectionTimeZone

UTC

設置連接時區,默認為客戶端運行的JVM時區(運行Java程序的虛擬機所使用的默認時區)。如無特殊需要可以不設置。

forceConnectionTimeZoneToSession

true

connectionTimeZone的值通過set time_zone語句設置到服務端。業務運行在非東八區時,建議添加該參數。

連接示例

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驅動連接寬表引擎,請參見基于Python的應用開發(mysql-connector-python)。

如果業務運行在UTC時區下,需要在連接串中添加time_zone參數來修改連接時區,使用方式:time_zone='UTC'。

參數

示例值

說明

time_zone

'UTC'

建議設置為業務運行的系統時區。系統將會通過set time_zone語句設置到服務端。

連接示例:

connection = mysql.connector.connect(host='<MySQL兼容地址>', port=33060, user='<用戶名>', passwd='<密碼>', database='<數據庫名>', time_zone='<時區>')

Go

通過Golang MySQL Driver驅動連接寬表引擎,請參見基于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())
}