Jeg tænkte, at dette kunne være nyttigt:
Der er tre steder, hvor tidszonen kan indstilles i MySQL:
I filen "my.cnf" i [mysqld]-sektionen
default-time-zone='+00:00'
@@global.time_zone variabel
For at se, hvilken værdi de er indstillet til:
SELECT @@global.time_zone;
For at indstille en værdi for det, brug enten en:
SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';
SET @@global.time_zone = '+00:00';
(Brug af navngivne tidszoner som 'Europa/Helsinki' betyder, at du skal have en tidszonetabel korrekt udfyldt.)
Husk at +02:00
er en offset. Europe/Berlin
er en tidszone (der har to forskydninger) og CEST
er et klokkeslæt, der svarer til en bestemt offset.
@@session.time_zone variabel
SELECT @@session.time_zone;
For at indstille det, brug enten en:
SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
SET @@session.time_zone = "+00:00";
Begge kan muligvis returnere SYSTEM, hvilket betyder, at de bruger den tidszone, der er indstillet i my.cnf.
For at tidszonenavne skal fungere, skal du konfigurere dine tidszoneoplysninger, der skal udfyldes:http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html . Jeg nævner også, hvordan man udfylder disse tabeller i dette svar .
For at få den aktuelle tidszone forskudt som TIME
SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);
Den vender tilbage 02:00:00, hvis din tidszone er +2:00.
For at få det aktuelle UNIX-tidsstempel:
SELECT UNIX_TIMESTAMP();
SELECT UNIX_TIMESTAMP(NOW());
For at få tidsstempelkolonnen som et UNIX-tidsstempel
SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`
For at få en UTC-dato-tidskolonne som et UNIX-tidsstempel
SELECT UNIX_TIMESTAMP(CONVERT_TZ(`utc_datetime`, '+00:00', @@session.time_zone)) FROM `table_name`
Bemærk:Ændring af tidszonen vil ikke ændre det gemte dato- og tidsstempel , men det vil vise en anden dato og klokkeslæt for eksisterende tidsstempelkolonner, da de er internt gemt som UTC-tidsstempler og eksternt vist i den aktuelle MySQL-tidszone.
Jeg lavede et cheatsheet her:Skal MySQL have sin tidszone indstillet til UTC?