Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Problemy ze strefą czasową w PHP i MySQL

Sztuczka polega na tym, aby wiedzieć, jaki typ kolumny date_last_active jest. Mam wystarczające doświadczenie z TIMESTAMP i DATETIME aby wiedzieć, że jedna z nich tłumaczy (i honoruje) zmienną sesji MySQL time_zone, druga nie.

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)

Oto co robię:

  • Podczas wstawiania do bazy danych użyj UTC w PHP i MySQL. W my.cnf Mam:time_zone=UTC aby uniknąć problemów w MySQL i PHP I date_default_timezone_set('UTC') .
  • Użyj UTC_TIMESTAMP() zamiast NOW() - jeden to UTC, drugi używa lokalnej (sesyjnej) strefy czasowej. Jeśli podążasz za pierwszym punktem powyżej, użyj UTC_TIMESTAMP().
  • Wybierając wyświetlanie użytkownikowi, set time_zone=' local_time_zone ' przed wyświetleniem czegokolwiek.
  • Jeśli musisz wyświetlać rzeczy, a następnie zaktualizuj, upewnij się, że Twoje wywołania są w nawiasie z odpowiednimi zmianami strefy czasowej w PHP i MySQL.

Mam nadzieję, że to wystarczy, aby dowiedzieć się, jak do tego podejść. Daj mi znać, jeśli masz dodatkowe pytania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać przygotowanych instrukcji w zapytaniach z klauzulą ​​IN w PHP

  2. Nie mogę uruchomić bundlera, ciągle pojawia się błąd

  3. Wyświetlaj wyniki MySQL według daty

  4. Uzasadnienie pełnego tekstu odrzucanych słów MySQL

  5. AVG() – Oblicz średnią wartość kolumny w MySQL