Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Tendo problemas de fuso horário com PHP e MySQL


O truque aqui é saber qual tipo de coluna date_last_active é. Tenho experiência suficiente com TIMESTAMP e DATETIME saber que um traduz (e honra) a variável de sessão do MySQL time_zone, o outro não.
mysql> SET SESSION time_zone = 'America/New_York';
Query OK, 0 rows affected (0.00 sec)

mysql> create table timetest ( dt datetime NULL, ts timestamp NOT NULL DEFAULT 0 );
Query OK, 0 rows affected (0.06 sec)

mysql> INSERT INTO timetest ( dt, ts ) VALUES ( UTC_TIMESTAMP(), UTC_TIMESTAMP() );
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO timetest ( dt, ts ) VALUES ( NOW(), NOW() );
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM timetest;
+---------------------+---------------------+
| dt                  | ts                  |
+---------------------+---------------------+
| 2009-06-27 17:53:51 | 2009-06-27 17:53:51 | 
| 2009-06-27 13:53:54 | 2009-06-27 13:53:54 | 
+---------------------+---------------------+
2 rows in set (0.00 sec)

mysql> set session time_zone='UTC';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM timetest;
+---------------------+---------------------+
| dt                  | ts                  |
+---------------------+---------------------+
| 2009-06-27 17:53:51 | 2009-06-27 21:53:51 | 
| 2009-06-27 13:53:54 | 2009-06-27 17:53:54 | 
+---------------------+---------------------+
2 rows in set (0.00 sec)

Então, aqui está o que eu faço:
  • Ao inserir no banco de dados, use UTC no PHP e no MySQL. Em my.cnf Eu tenho:time_zone=UTC para evitar problemas no MySQL e no PHP eu date_default_timezone_set('UTC') .
  • Usar UTC_TIMESTAMP() em vez de NOW() - um é UTC, um usa o fuso horário local (sessão). Se você estiver seguindo o primeiro ponto, acima, use UTC_TIMESTAMP().
  • Ao selecionar a exibição para o usuário, set time_zone=' local_time_zone ' antes de exibir qualquer coisa.
  • Se você precisar exibir coisas, então atualize, certifique-se de incluir suas chamadas com as alterações de fuso horário apropriadas em PHP e MySQL.

Espero que seja o suficiente para descobrir como abordar isso. Diga-me se tiver mais perguntas.