2010-09-07 27 views
8

:datetime:timestamp trong tệp di chuyển có vẻ giống nhau trong MySQL và Sqlite3 và cả hai ánh xạ tới datetime ở phía cơ sở dữ liệu, ngoại trừ tôi không thể tìm thấy trong tài liệu chính thức.Ngày giờ và dấu thời gian của Rails trong tệp di chuyển giống nhau đối với MySQL và Sqlite3?

Ngoài ra, những gì về khi nếu dự án Rails của chúng tôi có thể sử dụng DBMS khác, thì chúng ta nên sử dụng :datetime hoặc :timestamp khi chúng ta script/generate (hoặc rails generate) Model hoặc đài của chúng tôi?

Trả lời

14

Tôi khuyên bạn nên sử dụng :datetime, vì vậy rõ ràng nên sử dụng những gì. Tôi tin rằng đường ray đang sử dụng DATETIME cho cả hai trong DB là do vấn đề mà các datetimes đại diện với dấu thời gian unix hoặc MySQL TIMESTAMP lĩnh vực. Vì dấu thời gian theo mặc định là một số nguyên 32 bit (xem Wikipedia:Timestamp), nó chỉ có thể biểu thị các ngày giữa 1901-12-13 (hoặc 1970-01-01 nếu không có giá trị âm nào được cho phép như trong MySQL) và 2038-01-19. Sau hoặc trước đó nó sẽ tràn. Đây là year 2038 problem.

Vì vậy, để làm rõ mọi người, tôi sẽ đặt tên là :datetime trong quá trình di chuyển.

Loại dữ liệu TIMESTAMP có phạm vi '1970-01-01 00:00:01' UTC đến '2038-01-19 03:14:07' UTC. Nó có các thuộc tính khác nhau, tùy thuộc vào phiên bản MySQL và chế độ SQL mà máy chủ đang chạy. Các thuộc tính này được mô tả sau trong phần này. Source

+0

Cảm ơn @jigfox vì thông tin hữu ích này. Tôi tự hỏi rằng Rails sử dụng 'created_at' và' updated_at' như 'timestamp'. Không phải là 'datetime' là' dấu thời gian' sẽ tạo ra vấn đề sau ngày 19 tháng 1 năm 2038? –

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