Cómo convertir la zona horaria en MySQL

GuíasBases de datosMySQLProgramacionSQL

La zona horario de MySQL será por defecto la que use tu servidor. Además, la zona horario de tu servidor suele ser aquella del lugar o país en el que se encuentra.

La zona horaria de MySQL será usada por los campos TIME, DATE y DATETIME, que harán uso de la función CONVERT_TZ.

Cómo convertir la zona horaria en una consulta

Para realizar conversiones de zonas horarias en consultas tendrás que utilizar el comando CONVERT_TZ. Antes, de nada, para ejecutar consultas, conéctate a mysql desde la terminal. Vamos a ver un ejemplo en el que convertimos una zona horaria UTC a UTC+1:

SELECT CONVERT_TZ( NOW(),'Europe/London','Europe/Paris' );

El primer parámetro de la función CONVERT_TZ es la fecha actual, el segundo es la zona horaria en la que está dicha fecha y el tercero es la zona horaria a la que quieres convertir la fecha.

Cambiar la zona horaria de MySQL por defecto

Cuando el servidor se inicia, tratará de determinar la zona horaria del host automáticamente. Para ello se utilizará la variable system_time_zone, que no cambiará una vez configurada.

Si quieres cambiar la zona horaria de MySQL, deberás hacerlo antes de que MySQL (mysqld) se inicie. Es posible cambiarla si utilizas el comando mysqld_safe –timezone, pero no resulta muy práctico.

Habitualmente resulta más práctico (siempre que sea posible) cambiar la zona horaria cambiando el valor de la variable global del sistema time_zone. Para ello, ejecuta el siguiente comando desde la línea de comandos, reemplazando zona_horaria por al zona horaria que deseas configurar por defecto:

setenv TZ zona_horaria

El parámetro zona_horaria debe seguir un formato estándar. Consulta en el siguiente enlace la lista de zonas horarias.

Si quieres cambiar la zona horaria desde MySQL y quieres cambiar la zona horaria para todas las sesiones, puedes usar el siguiente consulta, usando MySQL desde la terminal:

SET GLOBAL time_zone = zona_horaria;

Si solo quieres cambiar la zona horaria para la sesión actual, usa esta consulta:

SET time_zone = timezone;

Si quieres saber cuál es la zona actual, realiza la siguiente consulta:

SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;