Inden resten af mit svar vil jeg lige nu anbefale, at hvis du har nogen mulighed for at ændre din applikation til at bruge UTC, vil det spare dig for en masse sorg nu og i fremtiden.
Men givet konteksten for dit spørgsmål, antager jeg, at dette ikke er en mulighed, og at du tilpasser et system designet til at bruge MySQL i et traditionelt servermiljø, hvor du bare kan ændre tidszonen, og at der er kodelogik, der forventer denne tidszone og kan ikke nemt tilpasses til at bruge UTC.
Men hvis du virkelig har brug for det til at gemme som PST, så læs videre.
Du har ret i, at mySql vil bruge serverens tidszone til tidsstempellagring som standard, men din antagelse om, at RDS-forekomster har deres tidszoner indstillet baseret på den AWS-region, hvor de er lanceret, er forkert - alle RDS-forekomster lanceres med deres tidszone indstillet som UTC, og denne konfiguration kan ikke ændres:
Så din eneste mulighed er at indstille tidszonen for hver forbindelse, din applikation laver til databaseinstansen, til PST. Du kan bruge SET SESSION time_zone = 'PST'
forespørgsel, der skal udføres i hver forbindelse, en applikation foretager ved at følge de to trin findes her
:
-
Opret følgende lagrede procedure (UTC-8 er PST):
-
Opret forbindelse til din instans, og kør følgende kommando:
-
Du skal muligvis give
EXECUTE
tilladelser til de brugere, der vil oprette forbindelse til databasen, ellers kan du få en forbindelsesfejl:
Nu skal hver forespørgsel, der udføres mod din RDS-instans af enhver klient, bruge PST uden at ændre nogen applikationslogik og uden at skulle opdatere nogen tidligere gemte tidsstempler i databasen.