2013-10-08 14 views
6

Điều này đã được hỏi trước nhưng không phải là câu trả lời tôi đang tìm kiếm. Tôi lưu trữ tất cả các ngày của tôi trong MYSQL trong UTC/GMT. Khi tôi giải nén sử dụng diễn đàn dữ liệu tham chiếu thời gian là nó tốt hơn để sử dụng CONVERT_TZ xây dựng ...Cách tốt nhất để xử lý múi giờ trong MySQL là gì?

SELECT CONVERT_TZ(mytime,'UTC',usertimezone) as mytime FROM table 

hoặc là nó tốt hơn để tạm thời thiết lập các khu vực phiên trong Mysql và sau đó làm các truy vấn bình thường không?

SET time_zone = usertimezone; 

Và nếu tôi sử dụng thứ hai, tôi chỉ làm điều đó một lần cho mỗi phiên người dùng hoặc nếu tôi không sử dụng mở liên tục, tôi có cần đặt trước mỗi truy vấn không?

+0

Bất kỳ lý do nào không để điều này được thực hiện trong ứng dụng khách thay thế? –

+0

Có rất nhiều công việc để xử lý mọi giá trị thời gian trước khi hiển thị. Cố gắng tối thiểu hóa mã hóa. :) –

+0

Bạn lưu trữ múi giờ của người dùng và sau đó sử dụng múi giờ đó để chuyển đổi UTC thành múi giờ của họ. – Kermit

Trả lời

3

Nếu dữ liệu của bạn được lưu trữ trong TIMESTAMP cột loại, thì bạn nên SET time_zone và MySQL sẽ tự động chuyển đổi sang/từ UTC khi truy xuất/chèn — bạn không cần phải làm gì thêm. Đây là phương pháp được khuyến nghị.

+0

Tôi hiếm khi sử dụng Dấu thời gian, nhưng đúng hơn là, ngày giờ. Ứng dụng này là bộ sưu tập dữ liệu khối lượng lớn và tôi muốn viết một số bản ghi với cùng một dấu thời gian chính xác. –

+1

@DougWolfgram: Bạn vẫn có thể cung cấp một giá trị nhất định cho trường 'TIMESTAMP' ([tự động khởi tạo và cập nhật] (http://dev.mysql.com/doc/en/timestamp-initialization.html) là * tùy chọn *, mặc dù hoạt động theo mặc định). 'DATETIME' là một con thú khác hoàn toàn và không lưu trữ bất kỳ khái niệm múi giờ nào (vì vậy MySQL * không thể thực hiện bất kỳ chuyển đổi ngầm nào cho phiên' time_zone'). – eggyal

+0

Tôi không biết. Khi tôi sử dụng set_timezone để đặt phiên của tôi thành UTC, nó xuất hiện để buộc chèn ngày giờ để chuyển đổi. –

7
  • Sử dụng TIMESTAMP nếu bạn muốn MySQL để làm việc chuyển đổi dựa trên các thiết lập time_zone của phiên hiện tại.

  • Sử dụng DATETIME nếu bạn trả lại UTC cho ứng dụng của bạn để ứng dụng xử lý chuyển đổi ở đó. (Đây sẽ là sở thích của tôi.)

  • Đừng cố trộn chúng lại. DATETIME sẽ không làm bất cứ điều gì với cài đặt time_zoneTIMESTAMP không thể được giả định là UTC khi nó được trả về ứng dụng của bạn trừ khi bạn hoàn toàn chắc chắn rằng time_zone được đặt thành UTC.

Các vấn đề liên quan