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

Hvordan indstiller jeg tidszonen for MySQL?

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?



  1. Sende liste<> til SQL Stored Procedure

  2. Fjern en databasepostkonto fra en profil (SSMS)

  3. Beregn en løbende total i MySQL

  4. hvordan man kontrollerer, at databasen er konsistent efter ufuldstændig gendannelse