Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwenden der IST-Zeit in der MySQL-Abfrage

Sie können die Zeitzoneneinstellung für die aktuelle MySQL-Sitzung mit einer SQL-Anweisung abrufen:

mysql> SELECT @@session.time_zone;

Wenn der DBA die Zeitzone auf MySQL nicht festgelegt hat, wird standardmäßig der Wert SYSTEM verwendet , die die Zeitzone des Betriebssystems darstellt.

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

NACHVERFOLGUNG:

In einem Prädikat wie in Ihrer Beispiel-SQL-Anweisung:

select * from mytable where dt > current_ist_datetime

(angegeben dt und current_ist_datetime vom Datentyp DATETIME ) ist der Vergleich der Werte unabhängig von einer Zeitzonenkonvertierung, da mit einem DATETIME keine Zeitzoneninformationen verknüpft sind Wert.

Das heißt, der Wert, der von einer Spalte des Datentyps DATETIME zurückgegeben wird wird nicht von der Zeitzoneneinstellung des MySQL-Servers beeinflusst (SELECT @@global.time_zone ) oder der MySQL-Session (SELECT @@session.time_zone ).

Der von NOW() zurückgegebene Wert Die Funktion wird jedoch von der time_zone-Einstellung der Sitzung beeinflusst.

Um dies in IST zurückzugeben, stellen Sie sicher, dass die time_zone für die Sitzung korrekt angegeben ist, z. B.

SET VARIABLES time_zone = "+05:30"

(Hinweis:Wenn die Sitzung von einem Verbindungspool abgerufen und zurückgegeben wird, erwarten die anderen Benutzer des Pools möglicherweise keine andere time_zone;...)

(HINWEIS:Das Obige ignoriert vollständig die durch den JDBC-Treiber verursachte Verwirrung, die durch die „Impedanzabweichung“ (Unterschiede) zwischen der MySQL-Implementierung des DATETIME-Datentyps und der Java-Implementierung des Date-Objekts verursacht wird. Wenn Sie DATETIME-Werte über eine JDBC-Verbindung übergeben, das ist der ganze 'andere Ball der Verwirrung.)