U kunt de tijdzone-instelling voor de huidige MySQL-sessie ophalen met een SQL-statement:
mysql> SELECT @@session.time_zone;
Als de DBA de tijdzone niet op MySQL heeft ingesteld, wordt deze standaard ingesteld op SYSTEM
, die de tijdzone op het besturingssysteem vertegenwoordigt.
http://dev.mysql.com/doc /refman/5.5/en/time-zone-support.html
VERVOLG:
In een predikaat zoals in uw voorbeeld SQL-statement:
select * from mytable where dt > current_ist_datetime
(gegeven dt
en current_ist_datetime
van gegevenstype DATETIME
)de vergelijking van de waarden is onafhankelijk van enige tijdzoneconversie, aangezien er geen tijdzone-informatie is gekoppeld aan een DATETIME
waarde.
Dat wil zeggen, de waarde die wordt geretourneerd uit een kolom van het gegevenstype DATETIME
wordt niet beïnvloed door de time_zone-instelling van de MySQL-server (SELECT @@global.time_zone
) of van de MySQL-sessie (SELECT @@session.time_zone
).
De waarde die wordt geretourneerd door de NOW()
functie wordt echter beïnvloed door de time_zone-instelling van de sessie.
Om dat terug te krijgen in IST, moet u ervoor zorgen dat de tijdzone voor de sessie correct is opgegeven, bijvoorbeeld
SET VARIABLES time_zone = "+05:30"
(N.B. Als de sessie wordt opgehaald uit en geretourneerd uit een verbindingspool, verwachten de andere gebruikers van de pool mogelijk geen andere tijdzone;...)
(OPMERKING:het bovenstaande negeert volledig de verwarring die wordt veroorzaakt door de JDBC-driver, veroorzaakt door de "impedantie-mismatch" (verschillen) tussen MySQL's implementatie van DATETIME-gegevenstype en Java-implementatie van Date-object. Als u DATETIME-waarden doorgeeft via een JDBC-verbinding, dat is een hele andere bal van verwarring.)