Mysql
 sql >> Database >  >> RDS >> Mysql

Problemi di fuso orario con PHP e MySQL

Il trucco qui è sapere quale tipo di colonna date_last_active è. Ho avuto abbastanza esperienza con TIMESTAMP e DATETIME sapere che uno traduce (e onora) la variabile di sessione MySQL time_zone, l'altro no.

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)

Quindi, ecco cosa faccio:

  • Quando inserisci nel database, usa UTC in PHP e in MySQL. In my.cnf Ho:time_zone=UTC per evitare problemi in MySQL e in PHP I date_default_timezone_set('UTC') .
  • Usa UTC_TIMESTAMP() invece di NOW() - uno è UTC, uno utilizza il fuso orario locale (sessione). Se stai seguendo il primo punto, sopra, usa UTC_TIMESTAMP().
  • Quando si seleziona da visualizzare all'utente, set time_zone=' fuso_orario_locale ' prima di visualizzare qualsiasi cosa.
  • Se devi visualizzare elementi, quindi aggiornare, assicurati di mettere tra parentesi le tue chiamate con le modifiche del fuso orario appropriate in PHP e MySQL.

Speriamo che sia abbastanza per capire come affrontare questo. Fammi sapere se hai altre domande.