Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utilisation de l'heure IST dans la requête mysql

Vous pouvez récupérer le paramètre de fuseau horaire pour la session MySQL en cours avec une instruction SQL :

mysql> SELECT @@session.time_zone;

Si le DBA n'a pas défini le fuseau horaire sur MySQL, il prendra par défaut une valeur de SYSTEM , qui représente le fuseau horaire du système d'exploitation.

http://dev.mysql.com/doc /refman/5.5/en/time-zone-support.html

SUIVI :

Dans un prédicat comme dans votre exemple d'instruction SQL :

select * from mytable where dt > current_ist_datetime

(étant donné dt et current_ist_datetime de type de données DATETIME ) la comparaison des valeurs sera indépendante de toute conversion de fuseau horaire, puisqu'il n'y a pas d'information de fuseau horaire associée à un DATETIME valeur.

Autrement dit, la valeur renvoyée par une colonne de type de données DATETIME n'est pas affecté par le paramètre time_zone du serveur MySQL (SELECT @@global.time_zone ) ou de la session MySQL (SELECT @@session.time_zone ).

La valeur renvoyée par NOW() Cependant, la fonction sera affectée par le paramètre time_zone de la session.

Pour obtenir ce retour dans IST, assurez-vous que le fuseau horaire de la session est correctement spécifié, par exemple

SET VARIABLES time_zone = "+05:30"

(N.B. Si la session est récupérée et renvoyée à partir d'un pool de connexion, les autres utilisateurs du pool peuvent ne pas s'attendre à un fuseau horaire différent ;...)

(REMARQUE :ce qui précède ignore entièrement la confusion introduite par le pilote JDBC, causée par la « discordance d'impédance » (différences) entre l'implémentation MySQL du type de données DATETIME et l'implémentation Java de l'objet Date. Si vous transmettez des valeurs DATETIME via une connexion JDBC, c'est tout 'une autre boule de confusion.)