Cómo funcionan las zonas horarias en Mysql

Variables de timezone definidas

Mysql establece el timezone o zonas horaria en distintas variables de sistema, las cuales sirven a diferentes propósitos.

Timezone del sistema

Se determina cuando el servidor inicia y se almacena en la variable global system_time_zone.

mysql> SELECT @@global.system_time_zone;

-> Hora estándar de Argentina

Timezone del servidor

Se almacena en la variable global time_zone e indica el timezone en el cual está operando el servidor. Por defecto, su valor es SYSTEM, lo que significa que es el mismo que el system_time_zone.

mysql> SELECT @@global.time_zone;

-> SYSTEM

Se puede cambiar su valor mediante

mysql> SET @@global.time_zone = 'timezone';

Timezone de la conexión

Se almacena en la variable de sesión time_zone e indica el timezone en el cual está operando la conexión. Por defecto, su valor es el de la variable global time_zone.

mysql> SELECT @@session.time_zone;

-> SYSTEM

Se puede cambiar su valor mediante

mysql> SET @@session.time_zone = 'timezone';

Valores de ‘timezone’ permitidos

Cuando debemos establecer un timezone podemos optar por los siguientes tipos de valor:

  • Offset de UTC
  • Nombre de zona horaria
  • Valor ‘SYSTEM’

Las zonas horarias nombradas disponibles en Mysql se pueden obtener mediante:

mysql> USE mysql;

mysql> SELECT name FROME time_zone_name;

Si no obtenemos ningún resultado, entonces deberemos cargar las zonas horarias en Mysql.

Uso de los timezones en Mysql

El campo de tipo TIMESTAMP convierte el valor desde el timezone de sesión a UTC para guardarlo y de UTC al timezone de sesión al devolverlo. También se utiliza el timezone de la sesión actual para el valor obtenido al invocar ciertas funciones, como por ejemplo, la función NOW().

Los campos de tipo DATE, TIME y DATETIME no se ven afectados por el timezone de la sesión como tampoco funciones asociadas a UTC, como puede ser UTC_TIMESTAMP().

Tagged with: , , ,
Publicado en Aplicaciones