Zonas horarias de MySQL

¿Hay una lista exhaustiva de zonas horarias MySQL?

Parece que los valores válidos para time_zone en la configuración de MySQL dependen del sistema operativo del host, pero no he podido encontrar una lista de valores posibles.

Necesito tiempo para mostrar la hora local de Calgary.

De la documentación de MySQL 5.7 (énfasis mío):

Los valores de la zona horaria pueden darse en varios formatos, ninguno de los cuales es sensible a mayúsculas y minúsculas:

El valor ‘SISTEMA’ indica que la zona horaria debe ser la misma que la zona horaria del sistema.

El valor se puede dar como una cadena que indica un desplazamiento desde UTC, como ‘+10: 00’ o ‘-6: 00’.

El valor puede darse como una zona horaria con nombre, como ‘Europa / Helsinki’, ‘US / Eastern’ o ‘MET’. Las zonas horarias con nombre solo se pueden usar si se han creado y llenado las tablas de información de la zona horaria en la base de datos mysql.

Cabe señalar que la configuración predeterminada de la variable de la zona horaria de MySQL es SISTEMA en el inicio de MySQL. El valor del SISTEMA se obtiene a partir de una configuración del sistema operativo (por ejemplo, desde el archivo al que hace referencia el enlace simbólico /etc/localtime )

La variable de zona horaria predeterminada de MySQL se puede inicializar a un valor diferente al inicio al proporcionar la siguiente opción de línea de comando:

 --default-time-zone=timezone 

Alternativamente, si está suministrando el valor en un archivo de opciones, debe usar la siguiente syntax para establecer la variable:

 --default-time-zone='timezone' 

Si usted es un usuario SUPER de MySQL, puede configurar la variable SYSTEM_zone_zone en tiempo de ejecución desde el prompt MYSQL> usando la siguiente syntax:

 SET GLOBAL time_zone=timezone; 

MySQL también admite valores de zona horaria SESSION individuales, que por defecto es el valor de la variable de entorno GLOBAL time_zone . Para cambiar el valor de la zona horaria de la sesión durante una SESIÓN, use la siguiente syntax:

 SET time_zone=timezone; 

Para consultar los valores de configuración de la zona horaria MYSQL existente, puede ejecutar el siguiente SQL para obtener estos valores:

 SELECT @@global.time_zone, @@session.time_zone; 

Por lo que vale, simplemente busqué en google los valores válidos de la configuración mysql time_zone y miré el primer resultado.

Por defecto, (al menos en instalaciones basadas en Debian) no se cargan datos de zona horaria en MySQL. Si desea probar si están cargados, intente ejecutar:

 SELECT CONVERT_TZ('2012-06-07 12:00:00', 'GMT', 'America/New_York'); 

Si devuelve un DATETIME (en este caso, 2012-06-07 08:00:00 ), tiene zonas horarias cargadas. Si devuelve NULL , no lo son. Cuando no está cargado, está limitado a convertir usando desplazamientos (por ejemplo, +10:00 o -6:00 ).

Esto debería funcionar bien en muchos casos, pero a veces es mejor usar zonas horarias con nombre, como para no preocuparse por el horario de verano. Ejecutar el siguiente comando carga los datos de zona horaria del sistema (solo para Unix. No estoy seguro de cuál sería el comando equivalente de Windows):

 mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql 

Si necesita confiar continuamente en las zonas horarias de MySQL, el comando anterior se debe ejecutar cada vez que se actualice la zona horaria del sistema . También puede agregarlo a un trabajo cron semanal o mensual para hacerlo automáticamente.

Luego, para ver una lista de zonas horarias, solo haga lo siguiente:

 USE mysql; SELECT * FROM `time_zone_name`; 

Tenga en cuenta que la información de zona horaria ocupa alrededor de 5 MB en MySQL. Si alguna vez desea descargar la información de la zona horaria, simplemente ejecute lo siguiente y reinicie MySQL:

 TRUNCATE `time_zone` ; TRUNCATE `time_zone_leap_second` ; TRUNCATE `time_zone_name` ; TRUNCATE `time_zone_transition` ; TRUNCATE `time_zone_transition_type` ; 

NO DROP estas tablas o sucederán cosas malas.


Editar:

En función de un comentario del usuario a continuación, si desea que los husos horarios se actualicen automáticamente al actualizar el sistema, primero debe permitir que root inicie sesión sin que se le solicite una contraseña.

MySQL> = 5.6.6

Ejecute el siguiente [ fuente ]:

 mysql_config_editor set --login-path=client --host=localhost --user=root --password 

MySQL <5.6.6

Cree un archivo ~/.my.cnf (si aún no existe) y agregue lo siguiente:

 [client] user=root password=yourMysqlRootPW 

Luego ejecuta chmod 600 ~/.my.cnf para asegurarte de que nadie más pueda leerlo.

Script de actualización

Agregue la siguiente secuencia de comandos a crontab para que se ejecute una vez por día:

 #!/bin/bash # Find if there are any timezone files that have been modified in the last 24 # hours and do not have ".tab" in the name (since these are not timezone files) if [ `find /usr/share/zoneinfo -mtime -1 | grep -v '\.tab' | wc -l` -gt 0 ]; then echo "Updating MySQL timezone info" # Note, suppressing STDERR here because of the .tab files above # that cause warnings. mysql_tzinfo_to_sql /usr/share/zoneinfo 2>/dev/null | mysql -u root mysql echo "Done!\n" fi 

Elimine las líneas de echo si no desea ninguna salida.

Nota: Esto es (en su mayoría) no probado. Avíseme si tiene algún problema y actualizaré esta respuesta.

He seguido adelante y he creado una esencia.

https://gist.github.com/4134305

https://gist.github.com/kinjal/9105369

Espero que la gente lo encuentre útil.

Se puede descargar una lista exhaustiva de zonas horarias desde el sitio web de MySQL como tablas de bases de datos que se importan al servidor MySQL.

Para la hora de Calgary puede especificar desplazamientos UTC como

 set time_zone = '-6:00'; 

Cabe señalar que la configuración predeterminada de la variable de la zona horaria de MySQL es SISTEMA en el inicio de MySQL. El valor del SISTEMA se obtiene a partir de la variable de entorno GLOBAL time_zone del sistema operativo.

La variable de zona horaria predeterminada de MySQL se puede inicializar a un valor diferente al inicio al proporcionar la siguiente opción de línea de comando:

 --default-time-zone=timezone 

Alternativamente, si está suministrando el valor en un archivo de opciones, debe usar la siguiente syntax para establecer la variable:

 --default-time-zone='timezone' 

Si usted es un usuario SUPER de MySQL, puede configurar la variable SYSTEM_zone_zone en tiempo de ejecución desde el prompt MYSQL> usando la siguiente syntax:

 SET GLOBAL time_zone=timezone; 

MySQL también admite valores de zona horaria SESSION individuales, que por defecto es el valor de la variable de entorno GLOBAL time_zone. Para cambiar el valor de la zona horaria de la sesión durante una SESIÓN, use la siguiente syntax:

 SET time_zone=timezone; 

Para consultar los valores de configuración de la zona horaria MYSQL existente, puede ejecutar el siguiente SQL para obtener estos valores:

 SELECT @@global.time_zone, @@session.time_zone; 

La única respuesta: http://timezonedb.com/download

Texto para que esta respuesta sea válida