No, non è possibile modificare il fuso orario per un singolo database all'interno di un'istanza MySQL.
Possiamo recuperare il server e il client time_zone
impostazioni con una query, come questa:
SELECT @@global.time_zone, @@session.time_zone;
Possiamo anche cambiare il fuso orario del client per una sessione o cambiare il fuso orario per l'intera istanza MySQL.
Ma dobbiamo essere ben consapevoli delle implicazioni che questo cambiamento avrà sulle connessioni client esistenti e del come DATETIME
e TIMESTAMP
i valori già memorizzati nell'istanza verranno interpretati.
Per impostare il fuso orario del server all'avvio dell'istanza MySQL, possiamo modificare /etc/my.cnf
file (o da dove vengono letti i parametri di inizializzazione dell'istanza mysql), sotto il [mysqld]
sezione:
[mysqld]
default-time-zone='+00:00'
-- oppure --
È anche possibile (meno desiderabile) aggiungere il --default_time_zone='+00:00'
opzione per mysqld_safe
NOTA: La modifica dell'impostazione del fuso orario sul server MySQL NON cambia i valori memorizzati nelle colonne DATETIME o TIMESTAMP esistenti, MA poiché cambia effettivamente il contesto in cui vengono interpretati quei valori memorizzati, sembrerà che tutti i valori SIANO spostati. (Dove 08:00 significava 8:00 CST, con il fuso orario del server cambiato da CST a GMT, le stesse "08:00" ora saranno considerate le 8:00 GMT, che sarebbero effettivamente le 2:00 CST.
Tieni inoltre presente che le colonne TIMESTAMP sono sempre archiviate in formato UTC, mentre le colonne DATETIME non hanno un fuso orario.http://dev.mysql.com/doc/refman/5.5/en/datetime.html
Ogni sessione client può modificare l'impostazione del fuso orario per la propria sessione:
SET time_zone='-06:00';
Ma niente di tutto ciò "risolve" davvero il problema della conversione del fuso orario, sposta semplicemente il problema della conversione.
Non c'è nulla di intrinsecamente "cattivo" con il livello dell'applicazione che gestisce le conversioni del fuso orario; a volte, questo è il posto migliore da gestire. Deve solo essere fatto in modo corretto e coerente.
(La cosa strana della configurazione che descrivi è che l'app sta memorizzando i valori DATETIME come se il fuso orario del server MySQL fosse impostato su GMT, ma il fuso orario del server MySQL fosse impostato su qualcos'altro.)