sql >> Databáze >  >> RDS >> Mysql

Problémy s časovým pásmem u PHP a MySQL

Trik je v tom vědět, jaký typ sloupce date_last_active je. Mám dostatek zkušeností s TIMESTAMP a DATETIME vědět, že jeden překládá (a respektuje) proměnnou relace MySQL time_zone, druhý nikoli.

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)

Takže, tady je to, co dělám:

  • Při vkládání do databáze používejte UTC v PHP a v MySQL. V my.cnf Mám:time_zone=UTC abych se vyhnul jakýmkoli problémům v MySQL a v PHP jsem date_default_timezone_set('UTC') .
  • Použijte UTC_TIMESTAMP() místo NOW() - jeden je UTC, jeden používá místní časové pásmo (relace). Pokud postupujete podle prvního bodu výše, použijte UTC_TIMESTAMP().
  • Při výběru zobrazení uživateli set time_zone=' local_time_zone ' před zobrazením čehokoli.
  • Pokud musíte zobrazit obsah a poté provést aktualizaci, ujistěte se, že svá volání zarovnáte s příslušnými změnami časového pásma v PHP a MySQL.

Snad to stačí na to, abychom zjistili, jak k tomu přistupovat. Pokud máte další otázky, dejte mi vědět.



  1. Ekvivalent LIMIT a OFFSET pro SQL Server?

  2. Nejlepší způsoby, jak vytvořit zálohy pro offline aplikace?

  3. Při dotazu došlo ke ztrátě připojení k serveru MySQL

  4. Analýza dat XML pomocí php pro vložení do databáze mysql