sql >> Database >  >> RDS >> Mysql

IST-tijd gebruiken in mysql-query

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.)



  1. NULL vs. 'oneindig' in PostgreSQL-bereiktypen

  2. Hoe kan ik de standaardvolgorde in MySQL ongedaan maken?

  3. MySQL CURRENT_TIMESTAMP bij aanmaken en bijwerken

  4. MySQL LIMIT met parameters