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; Database changed mysql> SELECT COUNT(*) FROM time_zone_name; 568
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().