Jag tänkte att det här kan vara användbart:
Det finns tre platser där tidszonen kan ställas in i MySQL:
I filen "my.cnf" i avsnittet [mysqld]
default-time-zone='+00:00'
@@global.time_zone variabel
För att se vilket värde de är inställda på:
SELECT @@global.time_zone;
För att ställa in ett värde för det, använd endera:
SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';
SET @@global.time_zone = '+00:00';
(Att använda namngivna tidszoner som "Europa/Helsingfors" innebär att du måste ha en tidszonstabell korrekt ifylld.)
Tänk på att +02:00
är en offset. Europe/Berlin
är en tidszon (som har två förskjutningar) och CEST
är en klocktid som motsvarar en specifik offset.
@@session.time_zone variabel
SELECT @@session.time_zone;
För att ställa in det, använd endera:
SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
SET @@session.time_zone = "+00:00";
Båda kan returnera SYSTEM vilket innebär att de använder tidszonen som är inställd i my.cnf.
För att tidszonsnamn ska fungera måste du ställa in dina tidszonsinformationstabeller måste fyllas i:http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html . Jag nämner också hur man fyller i dessa tabeller i det här svaret .
För att få aktuell tidszon förskjuten som TIME
SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);
Den kommer tillbaka 02:00:00 om din tidszon är +2:00.
För att få den aktuella UNIX-tidsstämpeln:
SELECT UNIX_TIMESTAMP();
SELECT UNIX_TIMESTAMP(NOW());
För att få tidstämpelkolumnen som en UNIX-tidsstämpel
SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`
För att få en UTC-datumtidkolumn som en UNIX-tidsstämpel
SELECT UNIX_TIMESTAMP(CONVERT_TZ(`utc_datetime`, '+00:00', @@session.time_zone)) FROM `table_name`
Obs! Ändring av tidszon kommer inte att ändra lagrad datumtid eller tidsstämpel , men det kommer att visa en annan datumtid för befintliga tidsstämpelkolumner eftersom de lagras internt som UTC-tidsstämplar och visas externt i den aktuella MySQL-tidszonen.
Jag gjorde ett cheatsheet här:Ska MySQL ha sin tidszon inställd på UTC?