Du kan hämta tidszonsinställningen för den aktuella MySQL-sessionen med en SQL-sats:
mysql> SELECT @@session.time_zone;
Om DBA inte har ställt in tidszonen på MySQL kommer den att ha värdet SYSTEM
som standard. , som representerar tidszonen i operativsystemet.
http://dev.mysql.com/doc /refman/5.5/en/time-zone-support.html
UPPFÖLJNING:
I ett predikat som i ditt exempel SQL-sats:
select * from mytable where dt > current_ist_datetime
(givet dt
och current_ist_datetime
av datatypen DATETIME
)jämförelsen av värdena kommer att vara oberoende av eventuell tidszonkonvertering, eftersom det inte finns någon tidszonsinformation kopplad till en DATETIME
värde.
Det vill säga värdet som returneras från en kolumn av datatypen DATETIME
påverkas inte av tidszonsinställningen för MySQL-servern (SELECT @@global.time_zone
) eller av MySQL-sessionen (SELECT @@session.time_zone
).
Värdet som returneras av NOW()
funktionen kommer dock att påverkas av tidszonsinställningen för sessionen.
För att få det returnerat i IST, se till att tidszonen för sessionen är korrekt specificerad, t.ex.
SET VARIABLES time_zone = "+05:30"
(OBS. Om sessionen hämtas från och returneras från en anslutningspool, kanske de andra användarna av poolen inte förväntar sig en annan tidszon;...)
(OBS:ovanstående ignorerar helt den förvirring som introduceras av JDBC-drivrutinen, orsakad av "impedansmismatch" (skillnader) mellan MySQL:s implementering av DATETIME-datatypen och Java-implementeringen av Date-objektet. Om du skickar DATETIME-värden över en JDBC-anslutning, det är en helt annan boll av förvirring.)