LindormTable 2.7.6 et les versions ultérieures prennent en charge plusieurs fuseaux horaires. Les versions antérieures sont figées sur UTC+8, le fuseau horaire de la machine virtuelle Java (JVM) exécutée sur le serveur. Cette rubrique explique comment définir un fuseau horaire au niveau de la session afin que les données TIMESTAMP soient renvoyées dans le fuseau horaire attendu par votre application.
Fonctionnement des paramètres de fuseau horaire
LindormTable utilise une variable de fuseau horaire au niveau de la session. Chaque connexion possède son propre paramètre de fuseau horaire indépendant. La modification du fuseau horaire de la session n'affecte ni les autres connexions, ni la valeur par défaut du serveur.
Seul le type de données TIMESTAMP est affecté par les paramètres de fuseau horaire. Les valeurs DATE et TIME sont stockées sous forme de chaînes brutes et sont toujours renvoyées telles quelles.
| Type de données | Format | Sensible au fuseau horaire |
|---|---|---|
| DATE | yyyy-mm-dd (par exemple, 2024-08-30) |
Non |
| TIME | hh:mm:ss (par exemple, 08:11:15) |
Non |
| TIMESTAMP | yyyy-mm-dd hh:mm:ss.SSS ou millisecondes epoch (par exemple, 1724976675345) |
Oui — affiché dans le fuseau horaire de la session |
Prérequis
Avant de commencer, assurez-vous que :
Votre version de LindormTable est la 2.7.6 ou une version ultérieure. Pour vérifier ou mettre à niveau votre version, consultez les Notes de version de LindormTable et Mettre à niveau la version mineure du moteur d'une instance Lindorm
Votre application se connecte à LindormTable via le protocole MySQL. La configuration du fuseau horaire n'est prise en charge que via le protocole MySQL. Pour plus de détails, consultez Utiliser le protocole MySQL pour développer des applications (recommandé)
Si vous ne pouvez pas mettre à niveau LindormTable vers la version 2.7.6 ou ultérieure depuis la console Lindorm, contactez le support technique (ID DingTalk : s0s3eg3).
Définir le fuseau horaire de la session
Le fuseau horaire par défaut est UTC+8. Utilisez l'instruction SET pour modifier le fuseau horaire de la connexion actuelle. Ce paramètre s'applique uniquement à cette connexion et n'affecte ni les autres connexions, ni les valeurs par défaut globales. Pour connaître la syntaxe complète, consultez Variables de session.
-- Set to UTC
SET @@time_zone = 'UTC';
-- Set to UTC+8
SET @@time_zone = '+08:00';
-- Set to Shanghai local time
SET @@time_zone = 'Asia/Shanghai';
Pour vérifier le paramètre actuel :
SELECT @@time_zone;
Exemples
Outil de ligne de commande MySQL
Pour obtenir des instructions de connexion, consultez Utiliser un client MySQL pour se connecter à LindormTable et l'utiliser.
L'exemple suivant crée une table et insère une ligne contenant des valeurs de date, d'heure et d'horodatage, puis montre comment la colonne TIMESTAMP change lorsque vous basculez de fuseau horaire.
Configuration de la table :
-- Create the table
CREATE TABLE tb (p1 INT, c1 DATE, c2 TIME, c3 TIMESTAMP(3), PRIMARY KEY (p1));
-- Insert a row
UPSERT INTO tb (p1, c1, c2, c3) VALUES (1, '2024-08-30', '08:11:15', '2024-08-30 08:11:15.354');
Requête dans UTC+8 (par défaut) :
-
Vérifiez le fuseau horaire actuel.
SELECT @@time_zone;Sortie attendue :
+-------------+ | @@time_zone | +-------------+ | +08:00 | +-------------+ -
Interrogez la table.
SELECT * FROM tb;Sortie attendue :
+------+------------+----------+-------------------------+ | p1 | c1 | c2 | c3 | +------+------------+----------+-------------------------+ | 1 | 2024-08-30 | 08:11:15 | 2024-08-30 08:11:15.354 | +------+------------+----------+-------------------------+
Basculez vers UTC et réinterrogez :
-
Modifiez le fuseau horaire pour UTC.
SET @@time_zone = 'UTC'; -
Confirmez la modification.
SELECT @@time_zone;Sortie attendue :
+-------------+ | @@time_zone | +-------------+ | UTC | +-------------+ -
Interrogez à nouveau la table.
SELECT * FROM tb;Sortie attendue :
+------+------------+----------+-------------------------+ | p1 | c1 | c2 | c3 | +------+------------+----------+-------------------------+ | 1 | 2024-08-30 | 08:11:15 | 2024-08-30 00:11:15.354 | +------+------------+----------+-------------------------+
Les valeurs c1 (DATE) et c2 (TIME) restent inchangées car elles ne sont pas sensibles au fuseau horaire. La valeur c3 (TIMESTAMP) passe de 08:11:15 à 00:11:15 — une différence de 8 heures reflétant la conversion de UTC+8 vers UTC.
Java
Pour obtenir des instructions de connexion, consultez Utiliser les API Java JDBC pour développer des applications.
Le pilote MySQL Connector/J fournit deux paramètres qui fonctionnent conjointement pour contrôler le fuseau horaire de la connexion :
| Paramètre | Exemple de valeur | Description |
|---|---|---|
connectionTimeZone |
UTC |
Fuseau horaire utilisé par le pilote pour convertir les valeurs TIMESTAMP côté client. Par défaut, il s'agit du fuseau horaire de la JVM. |
forceConnectionTimeZoneToSession |
true |
Lorsque ce paramètre est défini sur true, le pilote exécute SET time_zone lors de la connexion, appliquant ainsi connectionTimeZone à la session du serveur. Si votre activité s'exécute dans une région n'utilisant pas le fuseau horaire UTC+8, nous vous recommandons d'ajouter ce paramètre. |
Ajoutez les deux paramètres à votre chaîne de connexion lorsque votre application s'exécute en dehors de 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);
// Get a connection
Connection connection = DriverManager.getConnection(url, properties);
Python
Pour obtenir des instructions de connexion, consultez Utiliser mysql-connector-python pour développer des applications.
Transmettez le paramètre time_zone dans l'appel de connexion pour définir le fuseau horaire de la session lors de la connexion :
| Paramètre | Exemple de valeur | Description |
|---|---|---|
time_zone |
'UTC' |
Définit le fuseau horaire de la session sur le serveur. Définissez ce paramètre sur le fuseau horaire dans lequel votre application s'exécute. |
connection = mysql.connector.connect(
host='<LindormTable endpoint for MySQL>',
port=33060,
user='<Username>',
passwd='<Password>',
database='<Database name>',
time_zone='<Time zone>' # for example, 'UTC' or 'Asia/Tokyo'
)
Go
Pour obtenir des instructions de connexion, consultez Utiliser Go pour développer des applications.
Le pilote Golang MySQL transmet les variables de session via la chaîne de connexion. Les valeurs de chaîne doivent être encodées en URL : entourez la valeur de guillemets simples ('), puis encodez ces guillemets en pourcentage sous la forme %27. Par exemple, la chaîne 'UTC' devient %27UTC%27.
| Paramètre | Exemple de valeur | Description |
|---|---|---|
parseTime |
true |
Renvoie les valeurs DATE et TIMESTAMP sous forme de time.Time au lieu de chaînes brutes. Requis pour que le paramètre loc prenne effet. |
loc |
Local |
Fuseau horaire Go utilisé lors de l'analyse des valeurs time.Time. Local utilise le fuseau horaire du système. Ne prend effet que lorsque parseTime=true. |
time_zone |
%27UTC%27 |
Définit le fuseau horaire de la session sur le serveur. La valeur doit être encodée en URL — les guillemets simples deviennent %27. |
Pour plus d'informations sur la manière dont le pilote gère les variables système, consultez Variables système.
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'") // produces %27UTC%27
urlString = urlString + "&time_zone=" + timeZoneValue
db, err := sql.Open("mysql", urlString)
if err != nil {
panic(err.Error())
}
Étapes suivantes
Variables de session — liste complète des variables au niveau de la session prises en charge par LindormTable
Utiliser le protocole MySQL pour développer des applications (recommandé) — aperçu de la prise en charge du protocole MySQL dans LindormTable