Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Memiliki masalah Timezone dengan PHP dan MySQL

Triknya di sini adalah untuk mengetahui jenis kolom apa date_last_active adalah. Saya sudah cukup berpengalaman dengan TIMESTAMP dan DATETIME untuk mengetahui bahwa yang satu menerjemahkan (dan menghormati) variabel sesi zona waktu MySQL, yang lain tidak.

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)

Jadi, inilah yang saya lakukan:

  • Saat memasukkan ke database, gunakan UTC di PHP dan di MySQL. Di my.cnf Saya memiliki:time_zone=UTC untuk menghindari masalah apa pun di MySQL, dan di PHP saya date_default_timezone_set('UTC') .
  • Gunakan UTC_TIMESTAMP() bukannya NOW() - satu adalah UTC, satu menggunakan zona waktu lokal (sesi). Jika Anda mengikuti poin pertama di atas, gunakan UTC_TIMESTAMP().
  • Saat memilih untuk ditampilkan kepada pengguna, set time_zone=' zona_waktu_lokal ' sebelum menampilkan apa pun.
  • Jika Anda harus menampilkan sesuatu, lalu perbarui, pastikan untuk mengelompokkan panggilan Anda dengan perubahan zona waktu yang sesuai di PHP dan MySQL.

Semoga itu cukup untuk mengetahui cara mendekati ini. Beri tahu saya jika Anda memiliki pertanyaan lebih lanjut.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Meningkatkan kueri menggunakan banyak gabungan dalam ke wp_postmeta, tabel kunci/nilai

  2. Operand Harus Berisi 1 Kolom - MySQL TIDAK DI

  3. Pengaturan tabel lintang dan bujur MySQL

  4. python 3.5 - Django 1.10 - kesalahan instalasi windows 7 mysqlclient

  5. MySQL mengekspor KE OUTFILE --secure-file-priv error saat menggunakan set direktori