2010-09-07 10 views
8

:datetime और :timestamp माइग्रेशन फ़ाइल में माइस्क्लुएल और स्क्लाइट 3 में समान लगता है, और दोनों डेटाबेस डेटाबेस में datetime पर मैप करते हैं, सिवाय इसके कि मुझे औपचारिक दस्तावेज़ीकरण में यह नहीं मिल रहा है।माइग्रेशन फ़ाइल में रेल का डेटाटाइम और टाइमस्टैम्प MySQL और Sqlite3 के लिए समान है?

इसके अलावा, क्या बारे में जब अगर हमारे रेल परियोजना अन्य डीबीएमएस उपयोग कर सकते हैं, तो हम :datetime का उपयोग करना चाहिए या :timestamp जब हम script/generate (या rails generate) हमारे मॉडल या मचान?

उत्तर

14

मैं :datetime का उपयोग करने की अनुशंसा करता हूं, क्योंकि यह स्पष्ट है कि इसका उपयोग कैसे किया जाए। मेरा मानना ​​है कि डीबी में दोनों के लिए रेल DATETIME का उपयोग कर रहे हैं, समस्या यह है कि डेटािक्स समय यूनिक्स टाइमस्टैम्प या MySQL TIMESTAMP फ़ील्ड के साथ प्रतिनिधित्व योग्य है। चूंकि टाइमस्टैम्प डिफ़ॉल्ट रूप से 32 बिट इंटीजर है (Wikipedia:Timestamp देखें) यह केवल 1901-12-13 (या 1970-01-01 के बीच की तारीखों का प्रतिनिधित्व कर सकता है यदि MySQL में कोई नकारात्मक मानों की अनुमति नहीं है) और 2038-01-19। उसके बाद या उससे पहले यह बह जाएगा। यह year 2038 problem है।

तो इसे सभी को स्पष्ट करने के लिए मैं माइग्रेशन में :datetime नाम दूंगा।

टाइमस्टैम्प डेटा प्रकार की '1970-01-01 00:00:01' यूटीसी से '2038-01-19 03:14:07' यूटीसी की एक श्रृंखला है। MySQL संस्करण और SQL मोड सर्वर के चलते SQL मोड के आधार पर इसमें अलग-अलग गुण हैं। इन गुणों को बाद में इस खंड में वर्णित किया गया है। Source

+0

धन्यवाद इस उपयोगी जानकारी के लिए @ jigfox। मुझे यह जानकर आश्चर्य हो रहा है कि रेल 'बनाया_at' और' update_at' का उपयोग 'टाइमस्टैम्प 'के रूप में करता है। क्या यह 'टाइमटाइम' नहीं होना चाहिए क्योंकि 'टाइमस्टैम्प' 1 9 जनवरी, 2038 के बाद समस्या पैदा करेगा? –

संबंधित मुद्दे