2010-08-10 13 views

Respuesta

30

el comando:

SET time_zone = 'America/New_York'; 

(o lo que sea la zona horaria GMT + 1 es .: http://www.php.net/manual/en/timezones.php)

Este es el comando para configurar la zona horaria MySQL para un cliente individual, suponiendo que sus clientes se encuentren distribuidos en varias zonas horarias.

Este comando debe ejecutarse antes de cada comando SQL que implique fechas. Si sus consultas pasan por una clase, entonces esto es fácil de implementar.

+3

Esto cambiará automáticamente la fecha/t ime obtenido de todos los campos TIMESTAMP, pero no de los campos DATETIME. –

+0

No cambiará los valores almacenados en los campos DATETIME o TIMESTAMP. –

+6

no funciona para mí. II obtener un "Código de error: 1298. Zona horaria desconocida o incorrecta: 'América/Nueva_York' " – user1028741

3

Si usted tiene el privilegio SUPER, se puede establecer el valor de zona horaria global de servidores en tiempo de ejecución con esta declaración:

mysql> SET GLOBAL time_zone = timezone; 
+1

¿Y si hay no es un privilegio superadmin? –

+0

simplemente 'SET time_zone = timezone;' –

18

Si bien la respuesta de Bryon es útil, me gustaría añadir que su enlace es para PHP nombres de zona horaria, que no son los mismos que los nombres de zona horaria de MySQL.

Si desea configurar su zona horaria para una sesión individual a GMT + 1 (UTC + 1 para ser preciso) simplemente use la cadena '+01: 00' en ese comando. Es decir:

SET time_zone = '+01:00';

para ver qué zona horaria de su sesión de MySQL está usando, sólo hay que ejecutar esto:

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

Esta es una gran referencia con más detalles: MySQL 5.5 Reference on Time Zones

+2

SELECCIONE @@ global.time_zone, @@ session.time_zone, @@ global.system_time_zone; – zzapper

+1

Bien observado, acabo de probar "America/Sao_Paulo" sin éxito ... – Lennon

36

La forma más fácil forma de hacerlo, como lo señaló Umar, por ejemplo

mysql> SET GLOBAL time_zone = 'America/New_York'; 

El uso de la zona horaria indicada es importante para la zona horaria que tiene un ajuste de ahorro de luz natural. Sin embargo, por alguna Linux construye puede obtener la siguiente respuesta:

# 1298 - zona horaria desconocida o incorrecta

Si usted está viendo esto, es posible que tenga que ejecutar traducción tzinfo_to_sql .. . Es fácil de hacer, pero no es obvio. Desde el comando linux tipo de línea en:

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

Proporcionar la contraseña de superusuario (root de MySQL, no raíz de Linux) y cargará ninguna definición en su información de zonas en MySQL. A continuación, puede volver atrás y ejecutar su

mysql> SET GLOBAL time_zone = timezone; 
+0

Gracias. La información sobre el lado de Linux funciona para mí. –

+0

Funcionó perfectamente en centOS 7.1 – ryryan

+0

¿Qué pasa con los usuarios en Windows obteniendo "# 1298 - zona horaria desconocida o incorrecta"? – DelightedD0D

5

Aquí es cómo sincronizar PHP (> = 5.3) y las zonas horarias de MySQL por la configuración de sesión y de usuario. Coloque esto donde se ejecuta cuando necesita establecer zonas horarias sincronizadas.

date_default_timezone_set($my_timezone); 
$n = new \DateTime(); 
$h = $n->getOffset()/3600; 
$i = 60*($h-floor($h)); 
$offset = sprintf('%+d:%02d', $h, $i); 
$this->db->query("SET time_zone='$offset'"); 

Donde $ my_timezone es uno en la lista de zonas horarias PHP: http://www.php.net/manual/en/timezones.php

La zona horaria PHP tiene que convertirse en la hora y el minuto de compensación para MySQL. Eso es lo que hacen las líneas 1-4.

+0

¿No puedes obtener lo mismo con supersan

1

Si time_zone SET o SET GLOBAL time_zone no funciona, se puede cambiar de la siguiente manera:

  • Cambio huso horario del sistema, ejemplo: ubuntu ... $ sudo dpkg-reconfigure tzdata

  • reiniciar el servidor o puede reiniciar apache2 y mysql (/etc/init.d/mysql reiniciar)