sql >> Databasteknik >  >> RDS >> Mysql

Har tidszonproblem med PHP och MySQL

Tricket här är att veta vilken kolumntyp date_last_active är. Jag har haft tillräckligt med erfarenhet av TIMESTAMP och DATETIME att veta att den ena översätter (och respekterar) sessionsvariabeln MySQL time_zone, den andra gör det inte.

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)

Så här är vad jag gör:

  • När du infogar i databasen, använd UTC i PHP och MySQL. I my.cnf Jag har:time_zone=UTC för att undvika problem i MySQL och i PHP I date_default_timezone_set('UTC') .
  • Använd UTC_TIMESTAMP() istället för NOW() - en är UTC, en använder den lokala (sessions) tidszonen. Om du följer den första punkten ovan, använd UTC_TIMESTAMP().
  • När du väljer att visa för användaren, set time_zone=' local_time_zone ' innan du visar något.
  • Om du måste visa grejer och sedan uppdatera, se till att du har rätt tidszonsändringar i PHP och MySQL.

Förhoppningsvis räcker det för att ta reda på hur man ska ta sig an detta. Meddela mig om du har fler frågor.



  1. Jag behöver min PHP-sida för att visa min BLOB-bild från mysql-databasen

  2. Rails:Postgres tillstånd nekad att skapa databas på rake db:create:all

  3. Vad är användningen av GO i SQL Server Management Studio &Transact SQL?

  4. Hur date_part() fungerar i PostgreSQL