रेंज:
हमेशा स्पष्ट नुकसान होता है:जिस रेंज को आप स्टोर कर सकते हैं वह 1970 से 2038 तक सीमित है। यदि आपको इस सीमा के बाहर तिथियों को स्टोर करने की आवश्यकता है, तो आपको आम तौर पर किसी अन्य प्रारूप का उपयोग करने की आवश्यकता होगी। सबसे आम मामला मैंने पाया है कि यह जन्मतिथि के लिए कहां लागू होता है।
पठनीयता:
मुझे लगता है कि सबसे महत्वपूर्ण कारण यह है कि लोगों ने बिल्ट-इन डेट-टाइप्स में से किसी एक का उपयोग करना चुना है कि डेटा की व्याख्या करना आसान है। आप एक साधारण चयन कर सकते हैं, और प्रतिक्रिया को आगे प्रारूपित किए बिना मूल्यों को समझ सकते हैं।
सूचकांक:
दिनांक प्रकारों का उपयोग करने का एक अच्छा तकनीकी कारण यह है कि यह कुछ मामलों में अनुक्रमित क्वेरी की अनुमति देता है जो यूनिक्स टाइमस्टैम्प नहीं करता है। निम्नलिखित प्रश्न पर विचार करें:
SELECT * FROM tbl WHERE year(mydate_field) = 2009;
यदि mydate_field एक मूल दिनांक प्रकार का है, और फ़ील्ड पर एक अनुक्रमणिका है, तो फ़ंक्शन कॉल के बावजूद, यह क्वेरी वास्तव में एक अनुक्रमणिका का उपयोग करेगी। यह बहुत ही एकमात्र समय है जब MySQL इस तरह के क्षेत्रों पर फ़ंक्शन कॉल को अनुकूलित कर सकता है। टाइमस्टैम्प फ़ील्ड पर संबंधित क्वेरी इंडेक्स का उपयोग नहीं कर पाएगी:
SELECT * FROM tbl WHERE year(from_unixtime(mytimestamp_field)) = 2009;
यदि आप इसके बारे में थोड़ा सोचते हैं, तो इसके चारों ओर एक रास्ता है। यह क्वेरी वही काम करती है, और करेगी अनुक्रमणिका अनुकूलन का उपयोग करने में सक्षम हो:
SELECT * FROM tbl WHERE mytimestamp_field > unix_timestamp("2009-01-01") AND mytimestamp_field < unix_timestamp("2010-01-01");
गणना:
आम तौर पर, मैं नुकसान के बावजूद तारीखों को यूनिक्स समय के रूप में संग्रहीत करता हूं। यह वास्तव में इसकी खूबियों पर आधारित नहीं है, बल्कि इसलिए है क्योंकि मुझे इसकी आदत है। मैंने पाया है कि यह कुछ गणनाओं को सरल करता है, लेकिन दूसरों को जटिल बनाता है। उदाहरण के लिए, एक महीने को यूनिक्स टाइमस्टैम्प में जोड़ना बहुत कठिन है क्योंकि प्रति माह सेकंड की संख्या भिन्न होती है। यह mysql DATE_ADD() फ़ंक्शन का उपयोग करना बहुत आसान है। हालांकि, मुझे लगता है कि ज्यादातर मामलों में यह वास्तव में गणना को सरल बनाता है। उदाहरण के लिए, यह काफी सामान्य है कि आप पिछले दो दिनों से पोस्ट का चयन करना चाहते हैं। यदि फ़ील्ड में एक यूनिक्स टाइमस्टैम्प है, तो इसे आसानी से किया जा सकता है:
SELECT * FROM tbl WHERE mytimestamp_field > time() - 2*24*3600;
यह शायद स्वाद का मामला है, लेकिन मुझे व्यक्तिगत रूप से यह DATE_SUB() जैसे किसी फ़ंक्शन के सिंटैक्स को याद रखने की तुलना में तेज़ और आसान लगता है।
समय क्षेत्र:
यूनिक्स टाइमस्टैम्प समय क्षेत्र डेटा संग्रहीत नहीं कर सकता। मैं स्वीडन में रहता हूँ जिसमें एक ही समय क्षेत्र है, इसलिए यह वास्तव में मेरे लिए कोई समस्या नहीं है। हालांकि, यदि आप ऐसे देश में रहते हैं जो कई समय क्षेत्रों में फैला है तो यह एक बड़ी पीड़ा हो सकती है।