No, no es posible cambiar la zona horaria de una sola base de datos dentro de una instancia de MySQL.
Podemos recuperar el servidor y el cliente time_zone
configuración con una consulta, como esta:
SELECT @@global.time_zone, @@session.time_zone;
También podemos cambiar la zona horaria del cliente para una sesión o cambiar la zona horaria para toda la instancia de MySQL.
Pero debemos ser muy conscientes de las implicaciones que tendrá este cambio en las conexiones de clientes existentes y cómo DATETIME
y TIMESTAMP
se interpretarán los valores ya almacenados en la instancia.
Para configurar la zona horaria del servidor al iniciar la instancia de MySQL, podemos modificar el /etc/my.cnf
(o desde donde se lean los parámetros de inicialización de la instancia de mysql), bajo [mysqld]
sección:
[mysqld]
default-time-zone='+00:00'
-- o --
También es posible (menos deseable) agregar --default_time_zone='+00:00'
opción a mysqld_safe
NOTA: Cambiar la configuración de la zona horaria en el servidor MySQL NO cambia los valores almacenados en las columnas DATETIME o TIMESTAMP existentes, PERO dado que cambia efectivamente el contexto en el que se interpretan esos valores almacenados, parecerá que todos los valores ESTÁN cambiados. (Donde las 08:00 se tomaron como las 8 a. m. CST, con la zona horaria del servidor cambiada de CST a GMT, ese mismo '08:00' ahora se tomará como las 8 a. m. GMT, que en realidad serían las 2 a. m. CST.
También tenga en cuenta que las columnas TIMESTAMP siempre se almacenan en UTC, mientras que las columnas DATETIME no tienen una zona horaria.http://dev.mysql.com/doc/refman/5.5/en/datetime.html
Cada sesión de cliente puede cambiar la configuración de la zona horaria para su propia sesión:
SET time_zone='-06:00';
Pero nada de esto realmente "resuelve" el problema de conversión de la zona horaria, simplemente cambia el problema de conversión.
No hay nada intrínsecamente "malo" con la capa de aplicación que maneja las conversiones de zona horaria; a veces, ese es el mejor lugar para manejar. Solo tiene que hacerse de manera correcta y consistente.
(Lo extraño de la configuración que describe es que la aplicación está almacenando valores DATETIME como si la zona horaria del servidor MySQL estuviera configurada en GMT, pero la zona horaria del servidor MySQL estuviera configurada en otra cosa).