Pregunta de seguimiento de /server/191331/should-servers-have-their-timezone-set-to-gmt-utc
¿Debería establecerse la zona horaria MySQL en UTC o debería ser la misma zona horaria que el servidor o PHP? (Si no es UTC)
¿Cuáles son los pros y los contras?
Respuestas:
Parece que no importa qué zona horaria esté en el servidor siempre y cuando tenga la hora establecida correctamente para la zona horaria actual, conozca la zona horaria de las columnas de fecha y hora que almacena y esté al tanto de los problemas con el horario de verano.
Por otro lado, si tiene el control de las zonas horarias de los servidores con los que trabaja, puede tener todo configurado en UTC internamente y nunca preocuparse por las zonas horarias y el horario de verano.
Aquí hay algunas notas que recopilé sobre cómo trabajar con zonas horarias como una forma de hoja de referencia para mí y para otros que podrían influir en la zona horaria que la persona elegirá para su servidor y cómo almacenará la fecha y la hora.
Hoja de referencia de zona horaria MySQL
Notas:
GMT confunde segundos, por eso se inventó UTC.
¡Advertencia! diferentes zonas horarias regionales pueden producir el mismo valor de fecha y hora debido al horario de verano
Internamente, una columna de marca de tiempo de MySQL se almacena como UTC, pero al seleccionar una fecha, MySQL la convertirá automáticamente a la zona horaria de la sesión actual.
Al almacenar una fecha en una marca de tiempo, MySQL asumirá que la fecha está en la zona horaria de la sesión actual y la convertirá a UTC para su almacenamiento.
Para seleccionar una columna de marca de tiempo en formato UTC
No importa en qué zona horaria se encuentre la sesión MySQL actual:
También puede establecer el servidor o la zona horaria de sesión global o actual en UTC y luego seleccionar la marca de tiempo de esta manera:
Para seleccionar la fecha y hora actual en UTC:
Resultado de ejemplo:
2015-03-24 17:02:41
Para seleccionar la fecha y hora actual en la zona horaria de la sesión
Para seleccionar la zona horaria que se configuró cuando se inició el servidor
Devuelve "MSK" o "+04: 00" para la hora de Moscú, por ejemplo, hay (o hubo) un error de MySQL donde, si se configura en un desplazamiento numérico, no se ajustaría el horario de verano
Para obtener la zona horaria actual
Volverá a las 02:00:00 si su zona horaria es +2: 00.
Para obtener la marca de tiempo UNIX actual (en segundos):
Para obtener la columna de marca de tiempo como marca de tiempo UNIX
Para obtener una columna de fecha y hora UTC como marca de tiempo UNIX
Obtenga una fecha y hora de zona horaria actual de un entero de marca de tiempo de UNIX positivo
Obtenga una fecha y hora UTC de una marca de tiempo UNIX
Obtenga una fecha y hora de zona horaria actual a partir de un entero de marca de tiempo UNIX negativo
Hay 3 lugares donde se puede establecer la zona horaria en MySQL:
Nota: una zona horaria se puede configurar en 2 formatos:
en el archivo "my.cnf"
o
@@ global.time_zone variable
Para ver en qué valor están configurados
Para establecer un valor, use cualquiera de los dos:
@@ session.time_zone variable
Para configurarlo, use cualquiera de los dos:
tanto "@@ global.time_zone variable" como "@@ session.time_zone variable" podrían devolver "SYSTEM", lo que significa que usan la zona horaria establecida en "my.cnf".
Para que los nombres de zonas horarias funcionen (incluso para la zona horaria predeterminada), debe configurar las tablas de información de zonas horarias que deben rellenarse: http://dev.mysql.com/doc/refman/5.1/en/time-zone-support. html
Nota: no puede hacer esto ya que devolverá NULL:
Configurar tablas de zona horaria mysql
Para
CONVERT_TZ
trabajar, necesita que se llenen las tablas de zonas horariasSi están vacíos, complételos ejecutando este comando
si este comando le da el error " datos demasiado largos para la columna 'abreviatura' en la fila 1 ", entonces podría ser causado por un carácter NULO al final de la abreviatura de la zona horaria
la solución es ejecutar esto
(asegúrese de que las reglas dst de sus servidores estén actualizadas
zdump -v Europe/Moscow | grep 2011
https://chrisjean.com/updating-daylight-saving-time-on-linux/ )Vea el historial completo de transición DST (horario de verano) para cada zona horaria
CONVERT_TZ
también aplica los cambios de horario de verano necesarios según las reglas de las tablas anteriores y la fecha que utiliza.Nota:
Según los documentos , el valor que establezca para time_zone no cambia, si lo configura como "+01: 00", por ejemplo, time_zone se establecerá como un desplazamiento de UTC, que no sigue DST, por lo que Se mantendrá igual durante todo el año.
Solo las zonas horarias nombradas cambiarán el horario durante el horario de verano.
Las abreviaturas como
CET
siempre serán en invierno y enCEST
verano, mientras que +01: 00 siempre serán enUTC
hora + 1 hora y ambas no cambiarán con el horario de verano.La
system
zona horaria será la zona horaria de la máquina host donde está instalado mysql (a menos que mysql no pueda determinarlo)Puede leer más sobre trabajar con DST aquí
preguntas relacionadas:
Fuentes:
fuente
table
conjunto de actualizacionesmodified
= '2016-07-07 08:10 +00: 00'UNIX_TIMESTAMP(NOW());
, así como todos sus usos deCONVERT_TZ()
donde uno de los parámetros es `@@ session.time_zone. Para convertir de manera confiable las horas UTC en marcas de tiempo UNIX, básicamente debe configurar primero la sesión time_zone.Este es un ejemplo de trabajo:
fuente
PHP y MySQL tienen sus propias configuraciones de zona horaria predeterminadas. Debe sincronizar el tiempo entre su base de datos y la aplicación web, de lo contrario podría ejecutar algunos problemas.
Lea este tutorial: Cómo sincronizar sus zonas horarias PHP y MySQL
fuente
date_default_timezone_set("America/Los_Angeles");
ymysql_query("SET time_zone='" . date('P', time()) . "'");
funcionó con mucha elegancia!Los pros y los contras son prácticamente idénticos, depende de si quieres esto o no.
Tenga cuidado, si la zona horaria de MySQL difiere de la hora de su sistema (por ejemplo, PHP), comparar la hora o imprimir con el usuario implicará algunos ajustes.
fuente