sql >> Databasteknik >  >> RDS >> Mysql

Ställ in MySQL databas tidszon till GMT

Nej, det är inte möjligt att ändra tidszonen för en enskild databas inom en MySQL-instans.

Vi kan hämta servern och klienten time_zone inställningar med en fråga, så här:

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

Vi kan också ändra klientens tidszon för en session, eller ändra tidszonen för hela MySQL-instansen.

Men vi måste vara mycket medvetna om konsekvenserna som denna förändring kommer att ha på befintliga klientanslutningar, och hur DATETIME och TIMESTAMP värden som redan är lagrade i instansen kommer att tolkas.

För att få serverns tidszon inställd vid start av MySQL-instansen kan vi ändra /etc/my.cnf fil (eller varhelst mysql-instansens initialiseringsparametrar läses från), under [mysqld] avsnitt:

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

-- eller --

Det är också möjligt (mindre önskvärt) att lägga till --default_time_zone='+00:00' alternativet till mysqld_safe

OBS: Att ändra tidszonsinställningen på MySQL-servern ändrar INTE värdena som är lagrade i befintliga DATETIME- eller TIMESTAMP-kolumner, MEN eftersom det faktiskt ändrar sammanhanget i vilket dessa lagrade värden tolkas, kommer det att se ut som att alla värden ÄR förskjutna. (Där 08:00 antogs för att betyda 8:00 CST, med tidszonen för servern ändrad från CST till GMT, kommer samma "08:00" nu att vara 8:00 GMT, vilket i praktiken skulle vara 02:00 CST.

Tänk också på att TIMESTAMP-kolumner alltid lagras i UTC, medan DATETIME-kolumner inte har någon tidszon.http://dev.mysql.com/doc/refman/5.5/en/datetime.html

Varje klientsession kan ändra tidszonsinställningen för sin egen session:

SET time_zone='-06:00';

Men inget av detta "löser" verkligen tidszonskonverteringsproblemet, det flyttar bara omvandlingsproblemet runt.

Det finns inget som är "dåligt" med applikationslagret som hanterar tidszonsomvandlingar; ibland är det det bästa stället att hantera. Det måste bara göras korrekt och konsekvent.

(Det som är konstigt med inställningen du beskriver är att appen lagrar DATETIME-värden som om MySQL-serverns time_zone är inställd på GMT, men MySQL-serverns time_zone är inställd på något annat.)



  1. Är det möjligt att uppgradera MySQL i MAMP till MySQL 5.7?

  2. PDO-hämtning returnerar ingenting

  3. Hanterar datum och tid istället för datetime

  4. Förslag för implementering av revisionstabeller i SQL Server?