zona unknown mexico_city mexico incorrect horario horaria date_default_timezone_set cambiar america mysql timezone

unknown - set time zone mexico mysql



Zonas horarias de MySQL (6)

Cabe señalar que la configuración predeterminada de la variable de zona horaria de MySQL es SISTEMA en el inicio de MySQL. El valor del SISTEMA se obtiene 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 en el 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 sintaxis para establecer la variable:

--default-time-zone=''timezone''

Si es usuario de MySQL SUPER, puede establecer la variable SYSTEM_zone en el tiempo de ejecución desde el indicador MYSQL> usando la siguiente sintaxis:

SET GLOBAL time_zone=timezone;

MySQL también admite valores de zona horaria SESSION individuales que de forma predeterminada son 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 sintaxis:

SET time_zone=timezone;

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

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

¿Hay una lista exhaustiva de zonas horarias de 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 el tiempo para mostrar la hora local de Calgary.


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

los valores de la zona horaria se pueden dar en varios formatos, ninguno de los cuales distingue entre 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 proporcionar como una cadena que indica un desplazamiento desde UTC, como ''+10: 00'' o ''-6: 00''.

El valor se puede dar como una zona horaria con nombre, como "Europa / Helsinki", "Estados Unidos / Este" o "MET". Las zonas horarias con nombre solo se pueden usar si las tablas de información de zona horaria en la base de datos mysql se han creado y rellenado.

Cabe señalar que la configuración predeterminada de la variable de zona horaria de MySQL es SISTEMA en el inicio de MySQL. El valor del SISTEMA se obtiene de una configuración del sistema operativo (por ejemplo, del 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 en el 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 sintaxis para establecer la variable:

--default-time-zone=''timezone''

Si es usuario de MySQL SUPER, puede establecer la variable SYSTEM_zone en el tiempo de ejecución desde el indicador MYSQL> usando la siguiente sintaxis:

SET GLOBAL time_zone=timezone;

MySQL también admite valores de zona horaria SESSION individuales que de forma predeterminada son 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 sintaxis:

SET time_zone=timezone;

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

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

Para lo que vale, simplemente busqué en Google los valores válidos de la configuración de la zona horaria de mysql y miré el primer resultado.




Por defecto, (al menos en las 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 las zonas horarias cargadas. Si devuelve NULL , no lo son. Cuando no está cargado, está limitado a convertir utilizando compensaciones (por ejemplo, +10:00 o -6:00 ).

Esto debería funcionar bien en muchos casos, pero hay ocasiones en que es mejor usar zonas horarias con nombre, como para no preocuparse por el horario de verano. La ejecución del siguiente comando carga los datos de la zona horaria desde el 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 debe ejecutarse cada vez que se actualice la zona horaria del sistema . También puede simplemente agregarlo a un trabajo cron semanal o mensual para hacerlo automáticamente.

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

USE mysql; SELECT * FROM `time_zone_name`;

Tenga en cuenta que la información de la zona horaria ocupa aproximadamente 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:

Basado en un comentario del usuario a continuación, si desea que las zonas horarias se actualicen automáticamente cuando actualice el sistema, primero debe permitir que la raíz inicie sesión sin que se le solicite una contraseña.

MySQL> = 5.6.6

Ejecuta la siguiente [ source ]:

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 ejecute chmod 600 ~/.my.cnf para asegurarse de que nadie más pueda leerlo.

Actualizar script

Agregue el siguiente script a crontab para que se ejecute una vez al 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. Déjame saber si tienes algún problema y actualizaré esta respuesta.


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

Para el tiempo de Calgary puede especificar compensaciones UTC como

set time_zone = ''-6:00'';