sql >> Databasteknik >  >> RDS >> Mysql

Hur man ställer in databastidszon för en AWS RDS-instans

Innan resten av mitt svar vill jag bara rekommendera just nu att om du har något alternativ att ändra din applikation till att använda UTC kommer det att spara dig mycket sorg nu och i framtiden.

Men med tanke på sammanhanget för din fråga, antar jag att detta inte är ett alternativ och att du anpassar ett system designat för att använda MySQL i en traditionell servermiljö där du bara kan ändra tidszonen, och att det finns kodlogik som förväntar sig denna tidszon och kan inte enkelt anpassas för att använda UTC.

Men om du verkligen behöver det för att lagra som PST, läs vidare.

Du har rätt i att mySql kommer att använda serverns tidszon för tidsstämpellagring som standard, men ditt antagande att RDS-instanser har sina tidszoner inställda baserat på AWS-regionen där de lanseras är felaktigt - alla RDS-instanser lanseras med sin tidszon inställd som UTC, och den här konfigurationen kan inte ändras:

Så ditt enda alternativ är att ställa in tidszonen för varje anslutning som din applikation gör till databasinstansen till PST. Du kan använda SET SESSION time_zone = 'PST' fråga att köra i varje anslutning som ett program gör genom att följa de två stegen finns här :

  1. Skapa följande lagrade procedur (UTC-8 är PST):

  2. Anslut till din instans och kör följande kommando:

  3. Du kan behöva bevilja EXECUTE behörigheter till användarna som kommer att ansluta till databasen, annars kan du få ett anslutningsfel:

Nu ska varje fråga som körs mot din RDS-instans av en klient använda PST utan att modifiera någon applikationslogik och utan att behöva uppdatera några tidigare lagrade tidsstämplar i databasen.




  1. MySQL datetime inte återvändande tid

  2. Syntaxfel:WITH är inte giltig inmatning i denna position

  3. Hur får man ut storleken på tabellerna i en MySQL-databas?

  4. Returnerar ett värde även om inget resultat