Tôi nghĩ điều này có thể hữu ích:
Có ba vị trí mà múi giờ có thể được đặt trong MySQL:
Trong tệp "my.cnf" trong phần [mysqld]
default-time-zone='+00:00'
@@ biến global.time_zone
Để xem chúng được đặt thành giá trị nào:
SELECT @@global.time_zone;
Để đặt giá trị cho nó, hãy sử dụng một trong hai:
SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';
SET @@global.time_zone = '+00:00';
(Sử dụng các múi giờ được đặt tên như 'Châu Âu / Helsinki' có nghĩa là bạn phải có bảng múi giờ được điền chính xác.)
Hãy nhớ rằng +02:00
là một phần bù. Europe/Berlin
là múi giờ (có hai hiệu số) và CEST
là thời gian đồng hồ tương ứng với một độ lệch cụ thể.
@@ biến session.time_zone
SELECT @@session.time_zone;
Để đặt nó, hãy sử dụng một trong hai:
SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
SET @@session.time_zone = "+00:00";
Cả hai đều có thể trả về SYSTEM có nghĩa là chúng sử dụng múi giờ được đặt trong my.cnf.
Để tên múi giờ hoạt động, bạn phải thiết lập bảng thông tin múi giờ của mình cần được điền: http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html . Tôi cũng đề cập đến cách điền các bảng đó trong câu trả lời này .
Để lấy chênh lệch múi giờ hiện tại là TIME
SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);
Nó sẽ trả về 02:00:00 nếu múi giờ của bạn là +2:00.
Để lấy dấu thời gian UNIX hiện tại:
SELECT UNIX_TIMESTAMP();
SELECT UNIX_TIMESTAMP(NOW());
Để lấy cột dấu thời gian làm dấu thời gian UNIX
SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`
Để lấy cột ngày giờ UTC làm dấu thời gian UNIX
SELECT UNIX_TIMESTAMP(CONVERT_TZ(`utc_datetime`, '+00:00', @@session.time_zone)) FROM `table_name`
Lưu ý:Việc thay đổi múi giờ sẽ không thay đổi ngày giờ hoặc dấu thời gian được lưu trữ , nhưng nó sẽ hiển thị ngày giờ khác cho các cột dấu thời gian hiện có vì chúng được lưu trữ nội bộ dưới dạng dấu thời gian UTC và được hiển thị bên ngoài trong múi giờ MySQL hiện tại.
Tôi đã tạo bảng cheats ở đây: MySQL có nên đặt múi giờ thành UTC không?