2015-11-01 29 views
8

Tôi sẽ sử dụng MySQL và PHP và cần lưu trữ múi giờ trong DB. Dành một chút đọc lên trên đó, và nó có vẻ như tôi cần phải sử dụng một cái gì đó giống như America/Los_Angeles, và không , Pacific Standard Time, PST8PDT, +02.00 vvLưu trữ múi giờ trong cơ sở dữ liệu

Tôi lưu trữ toàn bộ America/Los_Angeles chuỗi, hoặc là có một số loại số nguyên ID cho nó như là https://stackoverflow.com/a/11580459/1032531 mô tả cho C#? Nếu chuỗi nào, số ký tự tối đa là bao nhiêu?

Trả lời

6

Các chuỗi múi giờ như America/New_York tham chiếu đến các mục nhập trong cái gọi là cơ sở dữ liệu zoneinfo. Đọc này. https://www.iana.org/time-zones Hiện tại, nó được duy trì bởi Cơ quan số được gán cho Internet. Nó thay đổi rất nhiều, bởi vì người bảo trì của nó tranh giành để theo kịp với những thay đổi về quy tắc tiết kiệm ánh sáng ban ngày và các công cụ thời gian chính trị khác.

Trên hệ thống giống UNIX, các mục nhập được lưu trữ trong hệ thống phân cấp thư mục hệ thống tệp chứ không phải bởi một số mã.

Bạn hỏi:

Tôi lưu trữ toàn bộ America/Los_Angeles chuỗi

Yes.

có loại ID số nguyên nào không?

Không, không nếu bạn muốn ứng dụng và cơ sở dữ liệu của bạn được chứng minh trong tương lai. Có một time_zone_id trong một phần của MySQL chứa dữ liệu zoneinfo, nhưng không ai thực hiện bất kỳ lời hứa nào về việc giữ cho những con số đó không thay đổi.

Chuỗi dài nhất trong cơ sở dữ liệu hiện tại (2015g) là "America/Argentina/ComodRivadavia". Dài 32 ký tự. Nó có thể có ý nghĩa để sử dụng VARCHAR(64) để lưu trữ thông tin này, do đó bạn không bao giờ chạy ra ngoài.

Nhân tiện, WordPress cung cấp cho người dùng danh sách chọn (danh sách thả xuống) các tên múi giờ sẵn có và lưu trữ lựa chọn của người dùng dưới dạng văn bản.

http://www.iana.org/time-zones

4

Kiểm tra ở đây MySql DateTime

MySQL chuyển đổi giá trị TIMESTAMP từ múi giờ hiện tại để tính theo giờ UTC cho việc lưu trữ, và trở lại từ UTC múi giờ hiện tại để thu hồi. (Điều này không xảy ra đối với các kiểu khác như DATETIME.) Theo mặc định, múi giờ hiện tại cho mỗi kết nối là thời gian của máy chủ. Múi giờ có thể được đặt trên cơ sở mỗi kết nối. Miễn là cài đặt múi giờ vẫn không đổi, bạn sẽ nhận được cùng giá trị mà bạn lưu trữ.

Bạn nên thêm cột mới trong bảng để giữ múi giờ và khi trích xuất thông tin chuyển đổi múi giờ của bạn.

+1

Vui lòng mô tả "cột mới trong bảng để giữ múi giờ" mà bạn tham chiếu. – user1032531

+1

nếu bạn cần biết chính xác múi giờ trước khi cơ sở dữ liệu của bạn chuyển đổi datetime của bạn, bạn cần giữ nó, bởi vì tự động hóa cơ sở dữ liệu chuyển đổi datetime của bạn trong múi giờ máy chủ và lưu trữ nó. – Laurentiu

+0

Tôi có nghĩa là tôi nên sử dụng 'VARCHAR (32)' để lưu trữ nó? Điều đó có đủ lớn cho tất cả các múi giờ không? Ngoài ra, xác nhận rằng không có một số ID nguyên cho múi giờ. – user1032531

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