Przed resztą mojej odpowiedzi, chciałbym zasugerować już teraz, że jeśli masz jakąkolwiek opcję zmiany aplikacji tak, aby używała UTC, zaoszczędzi ci to wiele smutku teraz i w przyszłości.
Jednak biorąc pod uwagę kontekst twojego pytania, zakładam, że nie jest to opcja i że dostosowujesz system zaprojektowany do używania MySQL w tradycyjnym środowisku serwerowym, w którym możesz po prostu zmienić strefę czasową i że istnieje logika kodu, która oczekuje tej strefy czasowej i nie można go łatwo dostosować do korzystania z UTC.
Ale jeśli naprawdę potrzebujesz go do przechowywania jako PST, czytaj dalej.
Masz rację, mySql domyślnie użyje strefy czasowej serwera do przechowywania znaczników czasu, jednak Twoje założenie, że instancje RDS mają ustawione strefy czasowe na podstawie regionu AWS, w którym są uruchamiane, jest nieprawidłowe - wszystkie instancje RDS są uruchamiane ze strefą czasową UTC, i ta konfiguracja może nie zmieniaj:
Tak więc jedyną opcją jest ustawienie strefy czasowej dla każdego połączenia aplikacji z instancją bazy danych na PST. Możesz użyć SET SESSION time_zone = 'PST'
zapytanie do wykonania w każdym połączeniu, które aplikacja tworzy, wykonując dwa kroki znalezione tutaj
:
-
Utwórz następującą procedurę składowaną (UTC-8 to PST):
-
Połącz się ze swoją instancją i uruchom następujące polecenie:
-
Może być konieczne przyznanie opcji
EXECUTE
uprawnienia dla użytkowników, którzy będą łączyć się z bazą danych, w przeciwnym razie może pojawić się błąd połączenia:
Teraz każde zapytanie wykonywane na Twojej instancji RDS przez dowolnego klienta powinno używać PST bez modyfikowania logiki aplikacji i bez konieczności aktualizowania wcześniej zapisanych znaczników czasu w bazie danych.