sql >> Database teknologi >  >> RDS >> Mysql

Indstil MySQL-databasens tidszone til GMT

Nej, det er ikke muligt at ændre tidszonen for en enkelt database i en MySQL-instans.

Vi kan hente serveren og klienten time_zone indstillinger med en forespørgsel som denne:

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

Vi kan også ændre klientens tidszone for en session eller ændre tidszonen for hele MySQL-forekomsten.

Men vi skal være meget opmærksomme på den implikation, som denne ændring vil have på eksisterende klientforbindelser, og hvordan DATETIME og TIMESTAMP værdier, der allerede er gemt i instansen, vil blive fortolket.

For at få serverens tidszone indstillet ved opstart af MySQL-instansen, kan vi ændre /etc/my.cnf fil (eller hvor som helst initialiseringsparametrene for mysql-instansen læses fra), under [mysqld] afsnit:

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

-- eller --

Det er også muligt (mindre ønskeligt) at tilføje --default_time_zone='+00:00' mulighed for at mysqld_safe

BEMÆRK: Ændring af tidszoneindstillingen på MySQL-serveren ændrer IKKE værdierne, der er gemt i eksisterende DATETIME- eller TIMESTAMP-kolonner, MEN da det effektivt ændrer konteksten, hvori disse lagrede værdier fortolkes, vil det se ud som om, at alle værdierne ER forskudt. (Hvor 08:00 blev taget til at betyde 8:00 CST, med tidszonen for serveren ændret fra CST til GMT, vil den samme '08:00' nu blive taget til at være 8:00 GMT, hvilket i praksis ville være 2:00 CST.

Husk også, at TIMESTAMP-kolonner altid gemmes i UTC, mens DATETIME-kolonner ikke har en tidszone.http://dev.mysql.com/doc/refman/5.5/en/datetime.html

Hver klientsession kan ændre tidszoneindstillingen for deres egen session:

SET time_zone='-06:00';

Men intet af dette "løser" virkelig tidszonekonverteringsproblemet, det flytter bare konverteringsproblemet rundt.

Der er ikke noget i sagens natur "dårligt" med applikationslaget, der håndterer tidszonekonverteringer; nogle gange er det det bedste sted at håndtere. Det skal bare gøres korrekt og konsekvent.

(Det, der er mærkeligt ved den opsætning, du beskriver, er, at appen gemmer DATETIME-værdier, som om MySQL-serverens time_zone er indstillet til GMT, men MySQL-serverens time_zone er indstillet til noget andet.)



  1. Hvad er standardnavnet i MySQL?

  2. Vælg de 3 seneste poster, hvor værdierne i én kolonne er forskellige

  3. SQL Server:dynamisk pivot over 5 kolonner

  4. MySQL tæller kolonner på specifik værdi