sql >> Database >  >> RDS >> Mysql

Hoe stel ik de tijdzone van MySQL in?

Ik dacht dat dit misschien handig zou zijn:

Er zijn drie plaatsen waar de tijdzone kan worden ingesteld in MySQL:

In het bestand "my.cnf" in de [mysqld] sectie

default-time-zone='+00:00'

@@global.time_zone variabele

Om te zien op welke waarde ze zijn ingesteld:

SELECT @@global.time_zone;

Gebruik een van beide om er een waarde voor in te stellen:

SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';
SET @@global.time_zone = '+00:00';

(Het gebruik van benoemde tijdzones zoals 'Europa/Helsinki' betekent dat u een correct ingevulde tijdzonetabel moet hebben.)

Houd er rekening mee dat +02:00 is een tegenprestatie. Europe/Berlin is een tijdzone (met twee verschuivingen) en CEST is een kloktijd die overeenkomt met een specifieke offset.

@@session.time_zone variabele

SELECT @@session.time_zone;

Gebruik een van beide om het in te stellen:

SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
SET @@session.time_zone = "+00:00";

Beide kunnen SYSTEM retourneren, wat betekent dat ze de tijdzone gebruiken die is ingesteld in my.cnf.

Om tijdzonenamen te laten werken, moet u uw tijdzone-informatietabellen instellen die moeten worden ingevuld:http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html . Ik vermeld ook hoe je die tabellen kunt vullen in dit antwoord .

Om de huidige tijdzone-offset te krijgen als TIME

SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);

Het zal 02:00:00 terugkeren als uw tijdzone +2:00 is.

Om de huidige UNIX-tijdstempel te krijgen:

SELECT UNIX_TIMESTAMP();
SELECT UNIX_TIMESTAMP(NOW());

Om de tijdstempelkolom als UNIX-tijdstempel te krijgen

SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`

Om een ​​UTC datetime-kolom als UNIX-tijdstempel te krijgen

SELECT UNIX_TIMESTAMP(CONVERT_TZ(`utc_datetime`, '+00:00', @@session.time_zone)) FROM `table_name`

Opmerking:het wijzigen van de tijdzone zal de opgeslagen datum- of tijdstempel niet wijzigen , maar er wordt een andere datum/tijd weergegeven voor bestaande tijdstempelkolommen, aangezien deze intern worden opgeslagen als UTC-tijdstempels en extern worden weergegeven in de huidige MySQL-tijdzone.

Ik heb hier een cheatsheet gemaakt:Moet MySQL de tijdzone hebben ingesteld op UTC?



  1. ORA-03113:einde bestand op communicatiekanaal

  2. Hoe MySQL Query Cache in te schakelen

  3. In Oracle AS werkt de alias niet

  4. mysql_fetch_row() versus mysql_fetch_assoc() versus mysql_fetch_array()