2013-04-05 39 views
14

Hãy để tôi giải thích: Tôi không hỏi về cách thích hợp để lưu trữ múi giờ của một ngày cụ thể trong cơ sở dữ liệu. Tôi đang nói về múi giờ. VÍ DỤ:Cách thích hợp để lưu trữ múi giờ trong cơ sở dữ liệu?

Tôi có bảng MySQL có tên 'người dùng'. Bây giờ, trên bảng này, tôi muốn có một cột có chứa múi giờ của bất cứ nơi nào người dùng sống (điều này được cung cấp bởi người dùng, nó sẽ được chọn từ một danh sách). Tôi đang làm việc với PHP, trong đó có một danh sách các chuỗi múi giờ như thế này:

List of TimeZones for America

Bây giờ, giải pháp rõ ràng (ít nhất là đối với tôi) sẽ tạo ra một cột VARCHAR trong bảng 'users' , sau đó lưu trữ chuỗi múi giờ được sử dụng bởi PHP trong cột đã nói.

Bây giờ tôi nghĩ về nó, điều đó sẽ giả sử tôi sẽ luôn sử dụng PHP để tương tác với bảng cơ sở dữ liệu đó, mà trong khi thực sự hiện tại, có thể không như vậy trong tương lai. Và (sửa tôi nếu tôi sai) Các chuỗi múi giờ của PHP có thể không hoạt động đối với các ngôn ngữ lập trình khác, có thể các ngôn ngữ khác có 'hằng số' của riêng chúng để xử lý múi giờ.

Bạn sẽ tiếp cận cách lưu tùy chọn múi giờ của người dùng trong cột DB, sau đó như thế nào? Bất kỳ ý tưởng chắc chắn được đánh giá cao.

Lưu ý: điều hữu ích về múi giờ của PHP là, ngay cả khi DST có hiệu lực, chúng tự động đưa nó vào tài khoản, điều này thật tuyệt vời. Vì vậy, bạn có thể thấy sự quan tâm của tôi trong việc sử dụng chúng thay vì chỉ lưu trữ một số bù đắp.

+0

Bạn có thể lưu trữ một số bù trong cơ sở dữ liệu, và tạo một tệp "config" PHP để ánh xạ lại số vào chuỗi múi giờ của PHP. – Passerby

+4

@Passerby - Khoản chênh lệch không phải là múi giờ. Có nhiều múi giờ thay đổi khoảng cách trong suốt cả năm và nhiều múi giờ khác nhau chia sẻ cùng một khoảng thời gian. –

+0

@MattJohnson Bạn có thể lưu trữ bù đắp của bất kỳ định dạng nào, miễn là chương trình của bạn biết cách "dịch" chúng trở lại thành các hằng số ngôn ngữ cụ thể. Thay vì lưu trữ "-8" cho toàn bộ khu vực -8, bạn có thể lưu trữ "-8.1" cho California, "-8,2" cho một địa điểm khác (không phải người Mỹ, vì vậy không biết nhiều :)). – Passerby

Trả lời

21

Và (đúng cho tôi nếu tôi sai) chuỗi múi giờ của PHP có lẽ không làm việc cho các ngôn ngữ lập trình khác

Ok, tôi sẽ. :)

PHP triển khai IANA/Olson/TZDB/ZoneInfo database (nhiều tên cho cùng một thứ). Đây là điều gần nhất đối với một tiêu chuẩn công nghiệp, và nó được thực hiện chỉ bằng mọi ngôn ngữ lập trình và nền tảng.

Hệ điều hành duy nhất không hỗ trợ nó là Microsoft Windows, vì Microsoft duy trì cơ sở dữ liệu múi giờ của riêng họ. Vì vậy, đối với các nền tảng Windows là trung tâm, như .Net, có libraries mà bạn phải sử dụng nếu bạn muốn hỗ trợ cho kiểu múi giờ đó.

Đọc thêm trong số timezone tag wiki hoặc trên Wikipedia.

Vì vậy, có - bạn chỉ lưu trữ chuỗi id múi giờ dưới dạng một varchar. Đó là điều tốt nhất để làm.

+0

Không biết về điều này, tuyệt vời! Tôi sẽ lưu trữ ID chuỗi múi giờ dưới dạng varchar, sau đó. Cảm ơn rất nhiều! –

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