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