sql >> Database >  >> RDS >> Mysql

Stel de tijdzone van de MySQL-database in op GMT

Nee, het is niet mogelijk om de tijdzone voor een enkele database binnen een MySQL-instantie te wijzigen.

We kunnen de server en client time_zone ophalen instellingen met een vraag, zoals deze:

SELECT @@global.time_zone, @@session.time_zone;

We kunnen ook de tijdzone van de client voor een sessie wijzigen of de tijdzone voor de hele MySQL-instantie wijzigen.

Maar we moeten ons terdege bewust zijn van de implicaties die deze wijziging zal hebben op bestaande clientverbindingen, en hoe DATETIME en TIMESTAMP waarden die al in de instantie zijn opgeslagen, worden geïnterpreteerd.

Om de server time_zone in te stellen bij het opstarten van de MySQL-instantie, kunnen we de /etc/my.cnf wijzigen bestand (of waar de initialisatieparameters van de mysql-instantie worden gelezen), onder de [mysqld] sectie:

[mysqld]
default-time-zone='+00:00' 

-- of --

Het is ook mogelijk (minder wenselijk) om de --default_time_zone='+00:00' toe te voegen optie voor mysqld_safe

OPMERKING: Het wijzigen van de tijdzone-instelling op de MySQL-server verandert NIET de waarden die zijn opgeslagen in bestaande DATETIME- of TIMESTAMP-kolommen, MAAR aangezien het wel de context verandert waarin die opgeslagen waarden worden geïnterpreteerd, lijkt het alsof alle waarden ZIJN verschoven. (Waar 08:00 werd opgevat als 8AM CST, met de tijdzone van de server gewijzigd van CST in GMT, wordt diezelfde '08:00' nu beschouwd als 8AM GMT, wat in feite 2AM CST zou zijn.

Houd er ook rekening mee dat TIMESTAMP-kolommen altijd worden opgeslagen in UTC, terwijl DATETIME-kolommen geen tijdzone hebben.http://dev.mysql.com/doc/refman/5.5/en/datetime.html

Elke clientsessie kan de tijdzone-instelling voor hun eigen sessie wijzigen:

SET time_zone='-06:00';

Maar niets van dit alles "lost" het tijdzoneconversieprobleem echt op, het verplaatst het conversieprobleem alleen maar.

Er is niets inherent "slecht" aan de applicatielaag die tijdzoneconversies verwerkt; soms is dat de beste plaats om te behandelen. Het moet gewoon correct en consequent worden gedaan.

(Wat vreemd is aan de configuratie die je beschrijft, is dat de app DATETIME-waarden opslaat alsof de MySQL-server time_zone is ingesteld op GMT, maar de MySQL-server time_zone is ingesteld op iets anders.)



  1. Een-op-veel SQL SELECT in één rij

  2. SQL-query om productverkopen per maand te vergelijken

  3. Recursieve CTE voegt velden samen met ouders vanuit een willekeurig punt

  4. databasebestand kopiëren van /assets naar /data/datamap in bestandsverkenner - Android