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

Jak nastavit časové pásmo databáze pro instanci AWS RDS

Před zbytkem mé odpovědi bych právě teď rád doporučil, že pokud máte jakoukoli možnost změnit svou aplikaci tak, aby používala UTC, ušetří vám to spoustu zármutku nyní i v budoucnu.

Nicméně vzhledem ke kontextu vaší otázky předpokládám, že to není možnost a že přizpůsobujete systém navržený tak, aby používal MySQL v tradičním serverovém prostředí, kde můžete pouze změnit časové pásmo, a že existuje logika kódu, která očekává toto časové pásmo a nelze jej snadno přizpůsobit pro použití UTC.

Ale pokud to opravdu potřebujete uložit jako PST, čtěte dále.

Máte pravdu, že mySql bude ve výchozím nastavení používat časové pásmo serveru pro ukládání časových razítek, nicméně váš předpoklad, že instance RDS mají svá časová pásma nastavena na základě regionu AWS, ve kterém jsou spuštěny, je nesprávný - všechny instance RDS jsou spuštěny s časovým pásmem nastaveným jako UTC, a tato konfigurace může nezměnit:

Takže vaší jedinou možností je nastavit časové pásmo pro každé připojení vaší aplikace k instanci databáze na PST. Můžete použít SET SESSION time_zone = 'PST' dotaz, který se má provést při každém připojení, které aplikace vytvoří, podle dvou kroků zde :

  1. Vytvořte následující uloženou proceduru (UTC-8 je PST):

  2. Připojte se k vaší instanci a spusťte následující příkaz:

  3. Možná budete muset udělit EXECUTE oprávnění pro uživatele, kteří se budou připojovat k databázi, jinak se může zobrazit chyba připojení:

Nyní by každý dotaz spuštěný proti vaší instanci RDS kterýmkoli klientem měl používat PST bez úpravy jakékoli aplikační logiky a bez nutnosti aktualizovat jakákoli dříve uložená časová razítka v databázi.




  1. 5 způsobů, jak opravit chybu „Divide by zero“ v SQL Server (Msg 8134)

  2. Můžeme omezit počet řádků v tabulce v MySQL?

  3. MySQL a Java - Získejte ID poslední vložené hodnoty (JDBC)

  4. Aktualizujte a vyberte v jednom dotazu