Prima del resto della mia risposta, mi piacerebbe solo raccomandare ora che se avete qualche opzione per cambiare la vostra applicazione per utilizzare UTC vi farà risparmiare un sacco di dolore ora e in futuro.
Tuttavia dato il contesto della tua domanda, presumo che questa non sia un'opzione e che tu stia adattando un sistema progettato per usare MySQL in un ambiente server tradizionale dove puoi semplicemente cambiare il fuso orario, e che c'è la logica del codice che si aspetta questo fuso orario e non può essere facilmente adattata per utilizzare UTC.
Ma se è davvero necessario archiviare come PST, continua a leggere.
Sei corretta che MySQL utilizzerà fuso orario del server per l'archiviazione timestamp per impostazione predefinita, tuttavia tua ipotesi che RDS casi hanno i loro fusi orari impostati in base alla regione AWS in cui vengono lanciati non è corretto - tutto istanze di RDS sono lanciati con il loro fuso orario impostato come UTC, and this configuration can't be changed:
The time zone is currently not modifiable. There is indeed a Parameter value in rds-describe-db-parameters
called "default_time_zone" but it's marked as not modifiable.
Quindi l'unica opzione è quella di impostare il fuso orario su ogni connessione l'applicazione fa per l'istanza del database a PST. È possibile utilizzare la query SET SESSION time_zone = 'PST'
da eseguire in ogni connessione un'applicazione effettua seguendo le due fasi found here:
creare il seguente stored procedure (UTC-8 è PST):
DELIMITER |
CREATE PROCEDURE mysql.store_time_zone()
IF NOT (POSITION('[email protected]' IN CURRENT_USER()) = 1) THEN
SET SESSION time_zone = '-8:00';
END IF
|
DELIMITER ;
Connect all'istanza, ed eseguire il seguente comando:
$ rds-modify-db-parameter-group PARAMGROUP --parameters "name=init_connect, value='CALL mysql.store_time_zone', method=immediate"
potrebbe essere necessario concedere EXECUTE
autorizzazioni per gli utenti che saranno la connessione al database, altrimenti si può ottenere un errore di connessione:
GRANT EXECUTE ON PROCEDURE mysql.store_time_zone TO 'user'@'host';
Ora ogni query eseguita contro l'istanza di RDS da qualsiasi client dovrebbero usare PST senza modificare alcuna logica applicativa e senza la necessità di aggiornare i timestamp precedentemente memorizzati nel database.
fonte
2013-03-04 09:33:28
Una soluzione migliore sarebbe quella di impostare il proprio fuso orario denominato per gestire l'ora legale. Suggerisco di cambiare la linea in: SET SESSION time_zone = 'US/Pacific'; –
Voglio mettere l'accento sul commento precedente, chiamato timezone fa davvero risparmiare sull'ora legale, sii consapevole anche del GMT, poiché non regge l'ora legale offset – Zavael
@ThomasPaine Il mio unico timore di questa soluzione è che, sembra ogni nuovo utente quello che viene aggiunto a questo database dovrà avere accesso a questa funzione del database o non funzionerà, corretto? Che dire degli altri database e dei loro utenti.Posso creare un database con questa stored procedure e in qualche modo assicurarmi che tutti possano accedervi per impostazione predefinita? – Neo