MySQL और PHP में टाइमस्टैम्प बनाम अभ्यास?


24

मुझे यकीन नहीं है कि मैं अपने डेटाटाइप को डेटाइम या टाइमस्टैम्प के रूप में कैसे निर्दिष्ट कर सकता हूं, मुझे लगता है कि मुझे दोनों की आवश्यकता होगी लेकिन विभिन्न घटनाओं पर। मेरी वेबसाइट दुनिया भर में उत्पादों और सेवाओं को बेचती है और उपयोगकर्ता को लॉगिन करने के लिए एक खाता प्रणाली भी है। कृपया निम्नलिखित स्पष्ट करें:

  • वर्तमान दिनांक और समय ग्राहक मेरी वेबसाइट से उत्पाद खरीदते हैं: डेटाइम?
  • डिलीवरी की तारीख और समय उनके स्थान और हमारे सिस्टम से गणना की गई तारीख / समय के आधार पर: डेटाइम?
  • पिछली बार उन्होंने अपने खाते में लॉग-इन किया था: टाइमस्टैम्प?

    1. क्रय तिथि (वर्तमान तिथि) को स्टोर करने और उसके बाद डेटाबेस में स्टोर करने के लिए php में कोड क्या है?
    2. कृपया विस्तार से बताएं कि इंटरनेट पर बहुत सारे स्पष्टीकरण पढ़ने के बाद उनमें से प्रत्येक का उपयोग कैसे करें, मैं अभी भी इसे प्राप्त नहीं करता हूं।

कुछ समय पहले मेरे पास एक बड़ा प्रोजेक्ट था, जहां प्रदर्शन एक नितांत आवश्यक था, अनुसंधान के महीनों के बाद हमने एक UTC टाइमस्टैम्प के साथ एक varchar क्षेत्र में संग्रहीत किया, यह हमारी जरूरतों (बड़े सामाजिक नेटवर्क) के लिए तेज और बेहतर साबित हुआ
जेसनडेविस

जवाबों:


29

MySQL टाइमस्टैम्प :

  • UTC में संग्रहीत हैं

    वे भंडारण पर यूटीसी में परिवर्तित हो जाते हैं और पुनर्प्राप्ति पर आपके समय क्षेत्र में वापस परिवर्तित हो जाते हैं। यदि आप समय क्षेत्र सेटिंग्स बदलते हैं , तो पुनर्प्राप्त मान भी बदल जाते हैं।

  • स्वचालित रूप से प्रारंभ और अद्यतन किया जा सकता है

    आप उनका डिफ़ॉल्ट मान और / या ऑटो अपडेट मूल्य निर्धारित कर सकते हैं CURRENT_TIMESTAMP

  • की सीमा 1970-01-01 00:00:01 UTCहै2038-01-19 03:14:07 UTC

जबकि MySQL डेटाइम :

  • आप क्या स्टोर करते हैं जो आपको ™ मिलता है।

  • की सीमा 1000-01-01 00:00:00है9999-12-31 23:59:59

    श्रेणी के बाहर के मूल्य काम कर सकते हैं - लेकिन सीमा के भीतर केवल मूल्यों को काम करने की गारंटी है।

  • आप उन तिथियों को स्टोर कर सकते हैं जहां दिन या महीना शून्य है।

    यह जन्मदिन मनाने का MySQL तरीका है! आप ऐसा नहीं कर सकते हैं TIMESTAMP, जिसका एकमात्र अपवाद शून्य मान है 0000-00-00

  • यदि आप की आवश्यकता है, तो आप ALLOW_INVALID_DATES मोड में, अमान्य दिनांक संग्रहीत कर सकते हैं ।

  • आप NOW()कुछ उदाहरणों में डिफ़ॉल्ट मान सेट कर सकते हैं , लेकिन स्वचालित रूप से आरंभिक और अद्यतित तारीखों का बेहतर और स्वाभाविक तरीका है TIMESTAMP

और निश्चित रूप से वहाँ भी कर रहे हैं DATEऔर TIME, जो काम की तरह DATETIME, लेकिन निश्चित रूप से DATEसमय की TIMEपरवाह नहीं करता है और तारीख की परवाह नहीं करता है। सभी चार डेटा प्रकार पूरी तरह से दिनांक और समय फ़ंक्शन की विस्तृत सरणी के साथ काम करते हैं , लेकिन जब आप डेटा प्रकारों को मिला रहे होते हैं तो आपको रूपांतरण प्रभावों के बारे में पता होना चाहिए ।

अब, आपके प्रश्न के लिए: आपको DATETIMEहर जगह का उपयोग करना चाहिए । तकनीकी कारणों से नहीं, लेकिन चूंकि आप अभी भी स्पष्ट नहीं हैं कि MySQL कैसे काम करता है, DATETIMEइसलिए यह सरल विकल्प है। इसका मतलब यह होगा कि आपको स्टोर करने से पहले PHP में वर्तमान टाइमस्टैम्प की गणना करना होगा, यह उतना आसान है:

$mysqldate = date("Y-m-d H:i:s"); 

PHP की तारीख समारोह की तरह काम करता है:

string date ( string $format [, int $timestamp = time() ] )

"Y-m-d H:i:s"प्रारूप एक MySQL के साथ और दूसरा पैरामीटर खाली छोड़ कर संगत है, date()कहता है time()वर्तमान पाने के लिए यूनिक्स टाइमस्टैम्प

MySQL के अतिरिक्त मान का उपयोग करने के TIMESTAMPबजाय DATETIMEवर्तमान टाइमस्टैम्प पर निर्णय लेने की जिम्मेदारी लेते हुए, और जब आप सम्मिलित / अद्यतन कर रहे हैं, तो आप फ़ील्ड को छोड़ सकते हैं। लेकिन जब से आप पहले से ही एक क्वेरी भेज रहे हैं, और PHP में वर्तमान टाइमस्टैम्प प्राप्त करने के लिए कोड न्यूनतम है, आप सुरक्षित रूप से DATETIMEसब कुछ के लिए जा सकते हैं ।

डेटाबेस में PHP टाइमस्टैम्प को स्टोर करने के लिए वास्तविक कोड के रूप में, आपको PHP डेटा ऑब्जेक्ट को देखना चाहिए , और यदि आप अभी भी अस्पष्ट हैं, तो इसके बजाय StackOverflow पर पूछें । लेकिन पहले से ही लगभग 1.5k संबंधित प्रश्न हैं , पूछने से पहले सुनिश्चित करें कि आप उनके माध्यम से जाते हैं। बस एक संकेत, तैयार बयान है कि शांत बच्चे कैसे करते हैं।


हम्म, यह एक समस्या हो सकती है कि आप क्वेरी को MySQL, या अपनी टेबल संरचना में कैसे भेजते हैं ... StackOverflow इस प्रकार की समस्याओं के लिए एक बेहतर जगह है, अपनी टेबल संरचना और अपने पूर्ण php कोड के साथ वहाँ एक प्रश्न पोस्ट करें, और समस्या क्या है और आपने पहले से क्या प्रयास किया है, इस पर कुछ विवरण। हम वास्तव में कार्यान्वयन बारीकियों पर चर्चा नहीं करते हैं ...
yannis

आपके जवाब के लिए धन्यवाद। मैंने $ mysqldate = date ("Ymd H: i: s") का उपयोग करने की कोशिश की है; $ क्वेरी = INSERT INTO टेबल VALUE ('"। $ mysqldate।' ') मेरे php कोड पर लेकिन इसे MySQL में 0000-00-00 00:00:00 तारीख (क्षेत्र) - डेटाइम (डेटाटाइप) में रखा जाएगा। मेरा वर्तमान दिनांक और समय संग्रहीत करने का इरादा है। यदि मैंने डेटाबेस में टाइमस्टैम्प के रूप में डेटाटाइप सेट किया है, तो php में कोड कैसे करें?
मॉड्यूलर

मुझे फिलहाल Stackoverflow पर कोई टिप्पणी पोस्ट करने की अनुमति नहीं है। थोड़ी शर्म आती है लेकिन ऐसा उन्होंने मेरे साथ किया है।
मॉड्यूलर

मुझे इसके लिए खेद है, लेकिन यदि आप अस्थायी निलंबन मोड में हैं तो एक अच्छा कारण होना चाहिए। अब आपकी टिप्पणी में कोड में एक संभावित त्रुटि यह है कि आप इस क्षेत्र का नामकरण कर रहे हैं Date, यह DATEडेटाटाइप और अजीब चीजों के लिए एक आरक्षित शब्द हो सकता है (MySQL संस्करण के आधार पर), इसलिए इसे किसी चीज़ का नाम बदलने की कोशिश करें creationdateऔर देखें कि क्या होता है । इसके अलावा, PHP से आपको TIMESTAMPफ़ील्ड्स को फ़ील्ड के समान व्यवहार करना चाहिए DATETIME, यह वास्तव में कोई फर्क नहीं पड़ता। उनका प्रारूप समान है।
यानिस

बहुत - बहुत धन्यवाद। यह लगभग पूरी रात बिताने के बाद अब यह पता लगाने की कोशिश की जा रही है कि ऐसा क्यों किया गया। :)
मॉड्यूलर

2

इस लेख से लिया गया संदर्भ:

मुख्य अंतर:

TIMESTAMP रिकॉर्ड में परिवर्तन को ट्रैक करने के लिए उपयोग किया जाता है, और हर बार रिकॉर्ड बदलने पर अपडेट किया जाता है। DATETIME विशिष्ट और स्थैतिक मूल्य को संग्रहीत करने के लिए उपयोग किया जाता है जो रिकॉर्ड में किसी भी परिवर्तन से प्रभावित नहीं होता है।

TIMESTAMP अलग-अलग TIME ZONE संबंधित सेटिंग से भी प्रभावित होता है। DATETIME स्थिर है।

TIMESTAMP ने वर्तमान समय क्षेत्र को संग्रहण के लिए UTC में बदल दिया, और पुनर्प्राप्ति के दौरान वर्तमान समय क्षेत्र में वापस परिवर्तित कर दिया। DATETIME ऐसा नहीं कर सकता।

TIMESTAMP समर्थित रेंज: '1970-01-01 00:00:01' UTC से '2038-01-19 03:14:07 IME UTC DATETIME समर्थित रेंज:' 1000-01-01 00:00:00 range से '9999 तक -12-31 23:59:59 :59


1
तो वर्ष 2040 में आप रिकॉर्ड्स में बदलाव के लिए क्या उपयोग करेंगे, टाइमस्टैम्प? मुझे नहीं लगता।
बिसेंन

-1

वैसे मैं इसे बहुत सरल तरीके से देखता हूं। आपके मामले में मैं datetimeऔर दोनों का उपयोग करेगा timestamp। दोनों का उपयोग करने के साथ आपको डेटा या ऐसा कुछ स्टोर करने में कोई अतिरिक्त समस्या नहीं होगी। आपकी तालिका में एक अतिरिक्त फ़ील्ड (स्तंभ) भी एक बड़ी समस्या नहीं है।

इसलिए मेरे दृष्टिकोण और अनुभवों में अब तक मैं आमतौर पर दोनों का उपयोग करता हूं। जब आप अपने आगंतुक को एक तारीख दिखाना चाहते हैं या इसे आगंतुकों के लिए समझने योग्य बनाते हैं तो डेटटाइम प्रारूप में एक तारीख प्रदर्शित करें।

जब आप किसी चीज़ की गणना करना चाहते हैं तो डेटाइम फॉर्मेट एक दर्द हो सकता है (2 तिथियों के बीच का अंतर, वर्तमान तिथि से कल की तारीख प्राप्त करें, वर्तमान तिथि से 1 सप्ताह पहले प्राप्त करें, कल की तारीख या ऐसा ही कुछ प्राप्त करें।) यह वास्तव में कठिन नहीं है, लेकिन आप आमतौर पर नहीं होंगे। उन्हें timestampऔर फिर सामान में बदलने की जरूरत है । और हाँ वर्तमान डेटाटाइम उदाहरण के लिए आपको मिलता है: $current = date("Y-m-d");या $current = date("Y-m-d H:i:s");यदि आप घंटों, मिनट और सेकंड भी चाहते हैं।

टाइमस्टैम्प सिर्फ 11 अंकों का एक नंबर है जो वास्तव में कुछ भी "मतलब" नहीं करता है। जब आप इसे देखेंगे तो आपको पता नहीं चलेगा कि यह किस तारीख को प्रदर्शित होता है। तो यह वास्तव में उपयोगकर्ता के अनुकूल नहीं है और आप इसका उपयोग केवल इसे प्रतिध्वनित करने और उदाहरण के लिए अपने आगंतुकों को दिखाने के लिए नहीं कर सकते। आपको इसे पठनीय में बदलने की आवश्यकता होगी। लेकिन यह आपको आसानी से इसे बदलने और विभिन्न तिथियों की गणना करने की क्षमता भी प्रदान करता है। उदाहरण के लिए यदि आप एक ही समय में कल के लिए टाइमस्टैम्प प्राप्त करना चाहते हैं, तो आप वर्तमान तिथि में सेकंड की संख्या जोड़ते हैं और आपके पास कल का समय है। उदाहरण: $tomorrow = time()+24*3600;आप आसानी से सेकंड में दो तिथियों के बीच अंतर कर सकते हैं या ऐसा कुछ भी।

इसलिए मैं डेटाइम और टाइमस्टैम्प दोनों का उपयोग करने का सुझाव दूंगा। यहां तक ​​कि अगर आप उदाहरण के लिए PhpMyadmin का उपयोग करते हैं और जल्दी से कुछ डेटा देखना चाहते हैं तो यह आपके लिए तब आसान होगा जब आप किसी दिनांक को दिनांक स्वरूप (उदाहरण 2011-12-20 10:15:20:) में देखते हैं, जैसा कि आप सिर्फ 11digit नंबर को देखेंगे। इसलिए दोनों का उपयोग करें और फिर कॉल करें और जो आपको बेहतर लगे, उसका उपयोग करें।

अगर आपको सिर्फ एक का चयन करना चाहिए या करना चाहिए तो मैं टाइमस्टैम्प का सुझाव दूंगा अन्यथा दोनों का उपयोग करें।


1
-1 Timestamp is just a number 11 digit long which doesn't really "mean" anythingMySQL टाइमस्टैम्प को डेटाइम के रूप में एक ही प्रारूप में संग्रहीत किया जाता है। आपको उन्हें php टाइमस्टैम्प के रूप में अच्छी तरह से बदलने की ज़रूरत है, जो आपके द्वारा वर्णित गणनाओं को करने के लिए, या बस MySQL के कई दिनांक / समय फ़ंक्शन का उपयोग करें और डेटाबेस में गणना करें। आपका जवाब वास्तव में कोई मतलब नहीं है।
यानिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.