sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo configuro la zona horaria de MySQL?

Pensé que esto podría ser útil:

Hay tres lugares donde se puede configurar la zona horaria en MySQL:

En el archivo "my.cnf" en la sección [mysqld]

default-time-zone='+00:00'

@@variable global.time_zone

Para ver en qué valor están configurados:

SELECT @@global.time_zone;

Para establecer un valor, use cualquiera de los dos:

SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';
SET @@global.time_zone = '+00:00';

(Usar zonas horarias nombradas como 'Europa/Helsinki' significa que debe tener una tabla de zonas horarias completa correctamente).

Tenga en cuenta que +02:00 es una compensación. Europe/Berlin es una zona horaria (que tiene dos compensaciones) y CEST es una hora de reloj que corresponde a un desplazamiento específico.

@@sesión.variable de zona horaria

SELECT @@session.time_zone;

Para configurarlo, use cualquiera de los dos:

SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
SET @@session.time_zone = "+00:00";

Ambos pueden devolver SYSTEM, lo que significa que usan la zona horaria establecida en my.cnf.

Para que los nombres de las zonas horarias funcionen, debe configurar las tablas de información de las zonas horarias que deben completarse:http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html . También menciono cómo llenar esas tablas en esta respuesta .

Para obtener el desplazamiento de la zona horaria actual como TIME

SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);

Volverá a las 02:00:00 si su zona horaria es +2:00.

Para obtener la marca de tiempo UNIX actual:

SELECT UNIX_TIMESTAMP();
SELECT UNIX_TIMESTAMP(NOW());

Para obtener la columna de marca de tiempo como una marca de tiempo UNIX

SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`

Para obtener una columna de fecha y hora UTC como una marca de tiempo UNIX

SELECT UNIX_TIMESTAMP(CONVERT_TZ(`utc_datetime`, '+00:00', @@session.time_zone)) FROM `table_name`

Nota:Cambiar la zona horaria no cambiará la fecha y hora almacenada ni la marca de tiempo , pero mostrará una fecha y hora diferente para las columnas de marca de tiempo existentes, ya que se almacenan internamente como marcas de tiempo UTC y se muestran externamente en la zona horaria actual de MySQL.

Hice una hoja de trucos aquí:¿Debe MySQL tener su zona horaria establecida en UTC?