sql >> Databáze >  >> RDS >> Mysql

Jak nastavím časové pásmo MySQL?

Myslel jsem, že by to mohlo být užitečné:

Existují tři místa, kde lze v MySQL nastavit časové pásmo:

V souboru "my.cnf" v sekci [mysqld]

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

@@global.time_zone variable

Chcete-li zjistit, na jakou hodnotu jsou nastaveny:

SELECT @@global.time_zone;

Chcete-li pro něj nastavit hodnotu, použijte jednu z následujících možností:

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

(Použití pojmenovaných časových pásem jako 'Evropa/Helsinki' znamená, že musíte mít správně vyplněnou tabulku časových pásem.)

Mějte na paměti, že +02:00 je offset. Europe/Berlin je časové pásmo (které má dva posuny) a CEST je čas hodin, který odpovídá určitému posunu.

proměnná @session.time_zone

SELECT @@session.time_zone;

Chcete-li jej nastavit, použijte jednu z následujících možností:

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

Oba mohou vrátit SYSTEM, což znamená, že používají časové pásmo nastavené v my.cnf.

Aby názvy časových pásem fungovaly, musíte nastavit, aby byly informační tabulky časových pásem naplněny:http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html . V této odpovědi také uvádím, jak tyto tabulky naplnit .

Chcete-li získat posun aktuálního časového pásma jako TIME

SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);

Pokud je vaše časové pásmo +2:00, vrátí se 02:00:00.

Jak získat aktuální časové razítko UNIX:

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

Chcete-li získat sloupec časového razítka jako časové razítko UNIX

SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`

Chcete-li získat sloupec data a času UTC jako časové razítko UNIX

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

Poznámka:Změna časového pásma nezmění uložené datum a čas ani časové razítko , ale u stávajících sloupců časových razítek zobrazí jiné datum a čas, protože jsou interně uloženy jako časová razítka UTC a externě zobrazeny v aktuálním časovém pásmu MySQL.

Vytvořil jsem cheatsheet zde:Mělo by mít MySQL časové pásmo nastavené na UTC?



  1. Nasazení multicloudového clusteru PostgreSQL

  2. Příklady PLSQL kurzorů – Explicitní, implicitní a referenční kurzory

  3. Alibaba Cloud

  4. Připojte se k nám na Microsoft Access s SQL Server Academy část II