Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Gặp sự cố về múi giờ với PHP và MySQL

Mẹo ở đây là biết loại cột nào date_last_active Là. Tôi đã có đủ kinh nghiệm với TIMESTAMPDATETIME để biết rằng một biến dịch (và tôn vinh) biến phiên múi giờ của MySQL, biến còn lại thì không.

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)

Vì vậy, đây là những gì tôi làm:

  • Khi chèn vào cơ sở dữ liệu, hãy sử dụng UTC trong PHP và trong MySQL. Trong my.cnf Tôi có:time_zone=UTC để tránh bất kỳ sự cố nào trong MySQL và trong PHP, tôi date_default_timezone_set('UTC') .
  • Sử dụng UTC_TIMESTAMP() thay vì NOW() - một là UTC, một sử dụng múi giờ địa phương (phiên). Nếu bạn đang theo dõi điểm đầu tiên ở trên, hãy sử dụng UTC_TIMESTAMP ().
  • Khi chọn hiển thị cho người dùng, hãy set time_zone=' local_time_zone ' trước khi hiển thị bất cứ thứ gì.
  • Nếu bạn phải hiển thị nội dung, sau đó cập nhật, hãy đảm bảo phân bổ các cuộc gọi của bạn với các thay đổi múi giờ thích hợp trong PHP và MySQL.

Hy vọng rằng đó là đủ để tìm ra cách tiếp cận điều này. Hãy cho tôi biết nếu bạn có thêm câu hỏi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự cố Varchar trên Mysql 2147483647

  2. Có cơ chế nào để tắt chèn vào bảng không?

  3. Mysql2 ::Lỗi:Quyền truy cập bị từ chối đối với người dùng 'test' @ 'localhost' vào cơ sở dữ liệu 'depot_test'

  4. Người dùng hiển thị MySQL

  5. Cách thay đổi mật khẩu gốc mysql