2010-03-28 13 views
19

संभवतः कई कोडर इस प्रश्न से पूछना चाहते हैं। यह उन MySQL समय स्वरूपों में से प्रत्येक का रोमांच क्या है। और आप इसे अपने ऐप्स में उपयोग करना पसंद करेंगे।MySQL: यूनिक्स टाइमस्टैम्प या डेटाटाइम

मेरे लिए मैं यूनिक्स टाइमस्टैम्प का उपयोग करता हूं क्योंकि शायद मुझे & ऑर्डर रिकॉर्ड्स को इसके साथ रिकॉर्ड करना आसान लगता है, और क्योंकि मैंने कभी भी डेटाटाइम चीज़ की कोशिश नहीं की। लेकिन अगर भी कोई मुझे बताता है कि मैं गलत हूं तो मैं अपने दिमाग को बदलने के लिए तैयार हूं।

धन्यवाद

+0

इसी प्रकार: http://stackoverflow.com/questions/409286/datetime-vs-timestamp –

उत्तर

16

टाइमस्टैम्प (दोनों पीएचपी लोगों और MySQL के वाले) 32 बिट (अर्थात 4 बाइट्स) पूर्णांकों का उपयोग कर जमा हो जाती है; जिसका अर्थ है कि वे एक तिथि सीमा, जो 1970 से 2038

DATETIME को जाता है कि सीमा की जरूरत नहीं है के लिए सीमित हैं - लेकिन (8 बाइट्स अगर मैं गलत नहीं हूँ) अधिक बाइट्स का उपयोग कर जमा हो जाती है


के बाद, के रूप में पीएचपी द्वारा देखा timestamps भंडारण, या timestamps के रूप में MySQL के द्वारा देखा के बीच:

  • पीएचपी टाइम स्टांप का उपयोग कर का मतलब जोड़तोड़ PHP से आसान कर रहे हैं - यह देखने Date/Time Functions
  • MySQL के टाइम स्टांप का उपयोग कर का मतलब जोड़तोड़ MySQL से आसान कर रहे हैं -, देखने 11.6. Date and Time Functions


और, MySQL के TIMESTAMP और DATETIME डेटाटाइप्स के बीच अधिक जानकारियां के लिए, 10.3.1. The DATETIME, DATE, and TIMESTAMP Types

+3

वे 32 बिट्स तक _now_ सीमित हैं :) –

+4

2038 में 32 बिट सिस्टम का उपयोग कौन कर रहा है? –

+0

'नया java.util.Date()। GetTime()' पहले से ही 64-बिट है। – osa

1

रिकॉर्ड अंकीयकरण जब तक पहले 1 जनवरी, 1970 तक देखना मुझे यूनिक्स युग पसंद है। यह सिर्फ वरीयता का मामला है, कई हस्ताक्षर किए गए नंबर कई भाषाओं का उपयोग करते समय निपटने के लिए आसान हैं।

बस ध्यान रखें, युग 1 जनवरी 1 9 70 से शुरू होता है। बहुत से कंपनियां दशकों से व्यापार में रही थीं, अगर इससे पहले नहीं।

+0

यूनिक्स टाइमस्टैम्प, एक हस्ताक्षरित 32 बिट पूर्णांक में, सभी तरह से तारीखों को 1 9 01 तक स्टोर कर सकता है, क्योंकि यह 21217483647 (13 दिसंबर, 1 9 01 8:45:53 अपराह्न यूटीसी) से 2147483647 तक फैल सकता है (1 9 जनवरी, 2038 3:14:07 पूर्वाह्न यूटीसी) –

9

जैसा कि अन्य ने कहा है, टाइमस्टैम्प डेटाटाइम की एक छोटी सी श्रृंखला (1 9 70 से 2038 तक) का प्रतिनिधित्व कर सकते हैं। हालांकि, टाइमस्टैम्प यूनिक्स एपोक (1 9 70-01-01 00:00:00 यूटीसी) के बाद से सेकंड की संख्या को मापता है, जिससे उन्हें समय क्षेत्र से स्वतंत्र बना दिया जाता है, जबकि DATETIME एक समय क्षेत्र के बिना दिनांक और समय संग्रहीत करता है। दूसरे शब्दों में, टाइमस्टैम्प अनजाने में समय पर एक विशेष बिंदु का संदर्भ देते हैं, जबकि समय में सटीक बिंदु एक डेटाटाइम को संदर्भित करता है जिसमें एक समय क्षेत्र (जिसे DATETIME फ़ील्ड में संग्रहीत नहीं किया जाता है) की आवश्यकता होती है। यह देखने के लिए कि इससे कोई फर्क नहीं पड़ता, विचार करें कि क्या होता है यदि हम अपना समय क्षेत्र बदलते हैं।

मान लें कि हम डेटाटाइम 2010-03-27 12:00 यूटीसी स्टोर करना चाहते हैं। यदि हम इसे स्टोर करते हैं और टाइमस्टैम्प या DATETIME का उपयोग करके इसे पुनर्प्राप्त करते हैं, तो आमतौर पर कोई फर्क नहीं पड़ता है। हालांकि, अगर सर्वर अब बदलता है ताकि स्थानीय समय क्षेत्र यूटीसी +01 है, तो हम डेटाटाइम खींचने पर दो अलग-अलग परिणाम प्राप्त करते हैं।

यदि हम फ़ील्ड को डेटाटाइम पर सेट करेंगे, तो यह समय क्षेत्र में परिवर्तन के बावजूद 2010-03-27 12:00 के रूप में डेटाटाइम की रिपोर्ट करेगा। यदि हम फ़ील्ड को टाइमस्टैंप पर सेट करेंगे, तो तिथि 2010-03-27 11:00 के रूप में रिपोर्ट की जाएगी। यह डेटाटाइप के साथ कोई समस्या नहीं है - यह केवल इस तथ्य का नतीजा है कि वे थोड़ी अलग जानकारी स्टोर करते हैं।

+0

यूनिक्स टाइमस्टैम्प, एक हस्ताक्षरित 32 बिट पूर्णांक में, सभी तरह से तारीखों को 1 9 01 तक स्टोर कर सकता है, क्योंकि यह 21217483647 (13 दिसंबर, 1 9 01 8:45:53) से फैल सकता है पीएम यूटीसी) से 2147483647 (1 9 जनवरी, 2038 3:14:07 पूर्वाह्न यूटीसी) –

2

यह वास्तव में निर्भर करता है।मैं आपको 2 उदाहरण दूंगा जहां एक दूसरे को पार करेगा:

टाइमस्टैम्प डाटाबेस से बेहतर है जब आप डेटाबेस में उपयोगकर्ता सत्र को संग्रहीत करना चाहते हैं और सत्र निर्माण समय (टाइमस्टैम्प प्रारूप में) का उपयोग तेजी से पुनर्प्राप्ति के लिए किया जाता है (साथ इंडेक्स)।
उदा। तालिका इस तरह दिख सकती है:
[session_create_time AS Timestamp][IP_address AS 32bit Int][etc...]
पहले दो कॉलम पर एक इंडेक्स होने से वास्तव में आपके प्रश्नों को तेज कर सकते हैं। यदि आपके पास session_create_time फ़ील्ड के लिए DATETIME मान प्रकार था, तो इसे और अधिक समय लिया जा सकता है। ध्यान दें कि जब उपयोगकर्ता उपयोगकर्ता पृष्ठ का अनुरोध करता है तो सत्र क्वेरी निष्पादित की जाती है, इसलिए दक्षता महत्वपूर्ण होती है।

DATETIME टाइमस्टैम्प से बेहतर है जब आप किसी उपयोगकर्ता की जन्मतिथि या कुछ ऐतिहासिक घटनाओं को संग्रहीत करना चाहते हैं जिन्हें लचीला समय सीमा की आवश्यकता होती है।

+0

यूनिक्स टाइमस्टैम्प, एक हस्ताक्षरित 32 बिट पूर्णांक में, 1 9 01 तक सभी तरह की तारीखों को स्टोर कर सकता है, क्योंकि यह 21217483647 (13 दिसंबर, 1 9 01 8:45:53 अपराह्न यूटीसी) से 2147483647 (1 9 जनवरी, 2038 3:14:07 पूर्वाह्न यूटीसी)। इसलिए जब तक आप 1 9 01 से पहले एक तारीख संग्रहित नहीं कर रहे हैं, एक टाइमस्टैम्प काम करेगा। –

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