क्या आप डेटाइम या टाइमस्टैम्प फ़ील्ड का उपयोग करने की अनुशंसा करेंगे , और क्यों (MySQL का उपयोग करके)?
मैं सर्वर पर PHP के साथ काम कर रहा हूँ।
क्या आप डेटाइम या टाइमस्टैम्प फ़ील्ड का उपयोग करने की अनुशंसा करेंगे , और क्यों (MySQL का उपयोग करके)?
मैं सर्वर पर PHP के साथ काम कर रहा हूँ।
जवाबों:
MySQL में टाइमस्टैम्प आमतौर पर रिकॉर्ड में बदलाव को ट्रैक करने के लिए उपयोग किए जाते हैं, और अक्सर रिकॉर्ड बदले जाने पर हर बार अपडेट किया जाता है। यदि आप एक विशिष्ट मूल्य संग्रहीत करना चाहते हैं, तो आपको डेटाइम फ़ील्ड का उपयोग करना चाहिए।
यदि आपका मतलब है कि आप UNIX टाइमस्टैम्प या देशी MySQL डेटाइम क्षेत्र का उपयोग करने के बीच निर्णय लेना चाहते हैं, तो मूल प्रारूप के साथ जाएं। आप उस तरह से MySQL के भीतर गणना कर सकते हैं
("SELECT DATE_ADD(my_datetime, INTERVAL 1 DAY)")
और ("SELECT UNIX_TIMESTAMP(my_datetime)")
जब आप इसे PHP से संचालित करना चाहते हैं तो रिकॉर्ड को क्वेरी करते समय मूल्य के प्रारूप को UNIX टाइमस्टैम्प में बदलना सरल है ।
DATETIME
एक तारीख का प्रतिनिधित्व करता है (जैसा कि कैलेंडर में पाया जाता है) और एक समय (जैसा कि एक दीवार घड़ी पर देखा जा सकता है), जबकि समय में TIMESTAMP
एक अच्छी तरह से परिभाषित बिंदु का प्रतिनिधित्व करता है। यह बहुत महत्वपूर्ण हो सकता है यदि आपका आवेदन समय क्षेत्र को संभालता है। Long 2010-09-01 16:31:00 ’कब तक था? यह इस बात पर निर्भर करता है कि आप किस समयक्षेत्र में हैं। मेरे लिए यह केवल कुछ सेकंड पहले था, आपके लिए यह भविष्य में एक समय का प्रतिनिधित्व कर सकता है। अगर मैं '1970-01-01 00:00:00 UTC' के बाद से 1283351460 सेकंड कहता हूं, तो आप जानते हैं कि मैं किस समय की बात करता हूं। (नीर का उत्कृष्ट उत्तर नीचे देखें)। [नकारात्मक पक्ष: मान्य श्रेणी]।
MySQL 5 और इसके बाद के संस्करण में, TIMESTAMP मान को स्टोरेज के लिए वर्तमान समय क्षेत्र से UTC में परिवर्तित किया जाता है, और पुनर्प्राप्ति के लिए UTC से वर्तमान समय क्षेत्र में वापस परिवर्तित किया जाता है। (यह केवल TIMESTAMP डेटा प्रकार के लिए होता है, न कि अन्य प्रकार जैसे DATETIME के लिए।)
डिफ़ॉल्ट रूप से, प्रत्येक कनेक्शन के लिए वर्तमान समय क्षेत्र सर्वर का समय है। टाइम ज़ोन को प्रति कनेक्शन के आधार पर सेट किया जा सकता है, जैसा कि MySQL सर्वर टाइम ज़ोन समर्थन में वर्णित है ।
मैं हमेशा पंक्ति मेटाडेटा (बनाई गई या संशोधित की गई) के अलावा कुछ के लिए DATETIME फ़ील्ड का उपयोग करता हूं।
जैसा कि MySQL प्रलेखन में बताया गया है:
DATETIME प्रकार का उपयोग तब किया जाता है जब आपको उन मानों की आवश्यकता होती है जिनमें दिनांक और समय दोनों जानकारी होती है। MySQL पुनः प्राप्त करता है और 'YYYY-MM-DD HH: MM: SS' प्रारूप में DATETIME मान प्रदर्शित करता है। समर्थित रेंज '1000-01-01 00:00:00' से '9999-12-31 23:59:59' है।
...
TIMESTAMP डेटा प्रकार की रेंज '1970-01-01 00:00:01' UTC से '2038-01-09 03:14:07' UTC है। इसमें MySQL संस्करण और SQL मोड में सर्वर चल रहा है, इसके आधार पर अलग-अलग गुण होते हैं।
आप सामान्य उपयोग में TIMESTAMPs की निचली सीमा को हिट करने की काफी संभावना रखते हैं - उदाहरण के लिए जन्मतिथि।
new Date().getTime()
पहले से ही आपको 64-बिट मान दिया गया है।
उदाहरण नीचे दिखाने के लिए TIMESTAMP
दिनांक प्रकार बदलने के बाद भी मान बदले time-zone to 'america/new_york'
जहां DATETIME
अपरिवर्तित है।
mysql> show variables like '%time_zone%';
+------------------+---------------------+
| Variable_name | Value |
+------------------+---------------------+
| system_time_zone | India Standard Time |
| time_zone | Asia/Calcutta |
+------------------+---------------------+
mysql> create table datedemo(
-> mydatetime datetime,
-> mytimestamp timestamp
-> );
mysql> insert into datedemo values ((now()),(now()));
mysql> select * from datedemo;
+---------------------+---------------------+
| mydatetime | mytimestamp |
+---------------------+---------------------+
| 2011-08-21 14:11:09 | 2011-08-21 14:11:09 |
+---------------------+---------------------+
mysql> set time_zone="america/new_york";
mysql> select * from datedemo;
+---------------------+---------------------+
| mydatetime | mytimestamp |
+---------------------+---------------------+
| 2011-08-21 14:11:09 | 2011-08-21 04:41:09 |
+---------------------+---------------------+
मैंने अपने उत्तर को लेख में बदल दिया है ताकि अधिक लोग इस उपयोगी को पा सकें, MySQL: डेटाइम वर्सस टाइमस्टैम्प डेटा प्रकार ।
DATETIME
समय-क्षेत्र परिवर्तन के साथ प्रभावी समय बदल गया, TIMESTAMP
नहीं बदला लेकिन मानव प्रतिनिधित्व किया।
set time_zone="america/new_york"
;
मुख्य अंतर यह है कि DATETIME स्थिर है जबकि TIMESTAMP time_zone
सेटिंग से प्रभावित होता है ।
इसलिए यह केवल तभी मायने रखता है जब आपके पास - या भविष्य में हो सकता है - समय क्षेत्र में सिंक्रनाइज़ किए गए क्लस्टर।
सरल शब्दों में: यदि मेरे पास ऑस्ट्रेलिया में एक डेटाबेस है, और अमेरिका में एक डेटाबेस को सिंक्रनाइज़ / पॉप्युलेट करने के लिए उस डेटाबेस का एक डंप लेते हैं, तो TIMESTAMP नए समय क्षेत्र में घटना के वास्तविक समय को प्रतिबिंबित करने के लिए अपडेट करेगा, जबकि DATHIME अभी भी एयू समय क्षेत्र में घटना के समय को दर्शाते हैं ।
DATETIME का एक बढ़िया उदाहरण जहाँ TIMESTAMP का उपयोग किया जाना चाहिए था, वह फ़ेसबुक में है, जहाँ उनके सर्वर कभी भी निश्चित नहीं होते हैं कि समय क्षेत्र के दौरान क्या समय हुआ। एक बार जब मैं बातचीत कर रहा था, जिसमें कहा गया था कि मैं संदेश भेजने से पहले संदेश का जवाब दे रहा था। (यह, निश्चित रूप से मैसेजिंग सॉफ़्टवेयर में खराब समय क्षेत्र अनुवाद के कारण भी हो सकता था यदि समय को सिंक्रनाइज़ किए जाने के बजाय पोस्ट किया जा रहा था।)
मैं यह निर्णय शब्दार्थ आधार पर करता हूं।
जब मुझे समय में एक (अधिक या कम) निश्चित बिंदु रिकॉर्ड करने की आवश्यकता होती है, तो मैं टाइमस्टैम्प का उपयोग करता हूं। उदाहरण के लिए जब एक रिकॉर्ड डेटाबेस में डाला गया था या जब कुछ उपयोगकर्ता कार्रवाई हुई थी।
मैं एक डेटाइम फ़ील्ड का उपयोग करता हूं जब दिनांक / समय सेट और मनमाने ढंग से बदला जा सकता है। उदाहरण के लिए जब उपयोगकर्ता बाद में नियुक्तियों को बदल सकता है।
मैं न तो DATETIME या TIMESTAMP फ़ील्ड का उपयोग करने की सलाह देता हूं । यदि आप किसी विशिष्ट दिन (जन्मदिन की तरह) का प्रतिनिधित्व करना चाहते हैं, तो एक DATE प्रकार का उपयोग करें, लेकिन यदि आप इससे अधिक विशिष्ट हैं, तो आप संभवतः एक वास्तविक क्षण को रिकॉर्ड करने में रुचि रखते हैं जैसा कि एक इकाई के विपरीत है समय (दिन, सप्ताह, महीना, वर्ष)। DATETIME या TIMESTAMP का उपयोग करने के बजाय, BIGINT का उपयोग करें, और केवल युग (System.currentTimeMillis () यदि आप जावा का उपयोग कर रहे हैं) के बाद से मिलीसेकंड की संख्या संग्रहीत करें। इसके कई फायदे हैं:
यह समस्या बारीकी से संबंधित है कि आपको डेटाबेस में पैसे का मूल्य (यानी $ 1.99) कैसे संग्रहीत करना चाहिए। क्या आपको एक दशमलव, या डेटाबेस के धन प्रकार का उपयोग करना चाहिए, या सभी में से एक डबल? उपरोक्त सभी समान विकल्पों में से कई के लिए ये 3 विकल्प भयानक हैं। समाधान यह है कि BIGINT का उपयोग करके सेंट में पैसे के मूल्य को संग्रहीत करें, और तब सेंट को डॉलर में परिवर्तित करें जब आप उपयोगकर्ता के लिए मूल्य प्रदर्शित करते हैं। डेटाबेस का काम डेटा संग्रहीत करना है, और उस डेटा को समझना नहीं है। ये सभी फैंसी डेटा-प्रकार जो आप डेटाबेस (विशेष रूप से ओरेकल) में देखते हैं, थोड़ा जोड़ते हैं, और आपको लॉक-इन करने के लिए सड़क पर शुरू करते हैं।
TATESTAMP DATETIME के लिए 4 बाइट्स बनाम 8 बाइट्स है।
http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html
लेकिन जैसा कि स्कर्नाइड ने कहा है कि यह वर्ष 1970 की निचली सीमा है। यह किसी भी चीज के लिए बहुत अच्छा है जो भविष्य में हो सकता है;)
TATESTAMP DATETIME के लिए चार बाइट बनाम आठ बाइट्स है।
टाइमस्टैम्प भी डेटाबेस पर हल्के होते हैं और तेजी से अनुक्रमित होते हैं।
DATETIME प्रकार का उपयोग तब किया जाता है जब आपको उन मानों की आवश्यकता होती है जिनमें दिनांक और समय दोनों जानकारी होती है। MySQL पुनः प्राप्त करता है और 'YYYY-MM-DD HH: MM: SS' प्रारूप में DATETIME मान प्रदर्शित करता है। समर्थित सीमा ′ 1000-01-01 00:00:00 1000 से ’9999-12-31 23:59:59 1000 है।
TIMESTAMP डेटा प्रकार की रेंज '1970-01-01 00:00:01 EST UTC से' 2038-01-09 03:14:07। UTC है। इसमें MySQL संस्करण और SQL मोड में सर्वर चल रहा है, इसके आधार पर अलग-अलग गुण होते हैं।
आवेदन पर निर्भर करता है, वास्तव में।
संघाई में नियुक्ति के लिए एक उपयोगकर्ता द्वारा न्यूयॉर्क में एक सर्वर पर टाइमस्टैम्प स्थापित करने पर विचार करें। अब जब उपयोगकर्ता संघाई में जुड़ता है, तो वह टोक्यो में एक मिरर किए गए सर्वर से समान नियुक्ति टाइमस्टैम्प का उपयोग करता है। वह टोक्यो समय में नियुक्ति देखेंगे, मूल न्यूयॉर्क समय से ऑफसेट।
तो ऐसे मानों के लिए जो किसी नियुक्ति या शेड्यूल की तरह उपयोगकर्ता के समय का प्रतिनिधित्व करते हैं, डेटाइम बेहतर है। यह सर्वर सेटिंग्स की परवाह किए बिना उपयोगकर्ता को सटीक तिथि और समय को नियंत्रित करने की अनुमति देता है। निर्धारित समय सर्वर का समय क्षेत्र, उपयोगकर्ता के समय क्षेत्र, या जिस तरह से दिन के उजाले बचत समय की गणना की जाती है (हां यह परिवर्तन होता है) से प्रभावित नहीं होता है, निर्धारित समय होता है।
दूसरी ओर, उन मूल्यों के लिए जो भुगतान लेनदेन, टेबल संशोधनों या लॉगिंग जैसे सिस्टम समय का प्रतिनिधित्व करते हैं, हमेशा टाइमस्टैम्प का उपयोग करते हैं। सर्वर को किसी अन्य समय क्षेत्र में ले जाने या अलग-अलग टाइमज़ोन में सर्वर के बीच तुलना करने पर सिस्टम प्रभावित नहीं होगा।
टाइमस्टैम्प भी डेटाबेस पर हल्के होते हैं और तेजी से अनुक्रमित होते हैं।
किसी भी हाल के फ्रंट-एंड फ्रेमवर्क (कोणीय 1/2, प्रतिक्रिया, Vue, ...) आसानी से और स्वचालित रूप से आपके UTC डेटाटाइम को स्थानीय समय में परिवर्तित कर सकते हैं।
इसके अतिरिक्त:
(जब तक आप अपने सर्वर के समय क्षेत्र को बदलने की संभावना नहीं रखते)
AngularJs के साथ उदाहरण
// back-end: format for angular within the sql query
SELECT DATE_FORMAT(my_datetime, "%Y-%m-%dT%TZ")...
// font-end Output the localised time
{{item.my_datetime | date :'medium' }}
सभी स्थानीय समय प्रारूप यहां उपलब्ध हैं: https://docs.angularjs.org/api/ng/filter/date
SET time_zone = '+0:00';
UTC के लिए।
एक timestamp
फ़ील्ड फ़ील्ड का एक विशेष मामला है datetime
। आप timestamp
विशेष गुण रखने के लिए कॉलम बना सकते हैं ; इसे बनाने और / या अपडेट करने के लिए खुद को अपडेट करने के लिए सेट किया जा सकता है।
"बड़े" डेटाबेस शब्दों में, timestamp
इस पर विशेष-केस ट्रिगर के एक जोड़े हैं।
सही क्या है यह पूरी तरह से उस पर निर्भर करता है जो आप करना चाहते हैं।
TIMESTAMP हमेशा UTC में होता है (अर्थात 1970-01-01 से, UTC में सेकंड समाप्त हो जाता है), और आपका MySQL सर्वर इसे कनेक्शन टाइमज़ोन के लिए दिनांक / समय में ऑटो-कन्वर्ट कर देता है। लंबी अवधि में, TIMESTAMP जाने का रास्ता है क्योंकि आप जानते हैं कि आपका अस्थायी डेटा हमेशा UTC में रहेगा। उदाहरण के लिए, यदि आप किसी भिन्न सर्वर पर माइग्रेट करते हैं या यदि आप अपने सर्वर पर टाइमज़ोन सेटिंग्स बदलते हैं तो आप अपनी तिथियों को खराब नहीं करेंगे।
नोट: डिफ़ॉल्ट कनेक्शन टाइमज़ोन सर्वर टाइमज़ोन है, लेकिन इसे प्रति सत्र (देखें SET time_zone = ...
) बदला जा सकता है ।
DATETIME, TIMESTAMP और DATE के बीच तुलना
वह क्या है [?
सूत्रों का कहना है:
MySQL में यह ध्यान देने योग्य है कि आप अपनी तालिका कॉलम बनाते समय नीचे की पंक्तियों के साथ कुछ का उपयोग कर सकते हैं:
on update CURRENT_TIMESTAMP
यह उस समय को अपडेट करेगा जब आप एक पंक्ति को संशोधित करते हैं और कभी-कभी संग्रहीत अंतिम संपादित जानकारी के लिए बहुत सहायक होता है। यह केवल टाइमस्टैम्प के साथ काम करता है, हालांकि डेटाइम नहीं।
MySQL और PHP के साथ काम करते समय मैं हमेशा एक यूनिक्स टाइमस्टैम्प का उपयोग करूंगा। PHP में डिफ़ॉल्ट दिनांक विधि होने का मुख्य कारण पैरामीटर के रूप में टाइमस्टैम्प का उपयोग होता है, इसलिए किसी भी पार्सिंग की आवश्यकता नहीं होगी।
PHP में वर्तमान यूनिक्स टाइमस्टैम्प प्राप्त करने के लिए, बस करें time();
और MySQL में करें SELECT UNIX_TIMESTAMP();
।
मेरे अनुभवों से, यदि आप एक दिनांक फ़ील्ड चाहते हैं जिसमें प्रविष्टि केवल एक बार होती है और आप उस विशेष फ़ील्ड पर कोई अद्यतन या कोई अन्य क्रिया नहीं करना चाहते हैं, तो दिनांक समय के साथ जाएँ ।
उदाहरण के लिए, user
किसी पंजीकरण डेट फ़ील्ड वाली तालिका पर विचार करें । उस user
तालिका में, यदि आप किसी विशेष उपयोगकर्ता के अंतिम लॉग इन को जानना चाहते हैं, तो टाइमस्टैम्प प्रकार के फ़ील्ड के साथ जाएं ताकि फ़ील्ड अपडेट हो जाए।
यदि आप phpMyAdmin से तालिका बना रहे हैं तो पंक्ति सेटिंग होने पर डिफ़ॉल्ट सेटिंग टाइमस्टैम्प फ़ील्ड को अपडेट कर देगी । यदि आपका टाइमस्टैम्प दायर किया गया है तो पंक्ति अद्यतन के साथ अद्यतन नहीं हो रहा है, तो आप टाइमस्टैम्प फ़ील्ड को ऑटो अपडेट होने के लिए निम्न क्वेरी का उपयोग कर सकते हैं ।
ALTER TABLE your_table
MODIFY COLUMN ts_activity TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
टाइमस्टैम्प डेटा का प्रकार दिनांक और समय संग्रहीत करता है, लेकिन UTC प्रारूप में, वर्तमान समय क्षेत्र प्रारूप में नहीं है जैसा कि डेटाइम करता है। और जब आप डेटा प्राप्त करते हैं, तो टाइमस्टैम्प फिर से वर्तमान टाइमज़ोन समय में परिवर्तित हो जाता है।
तो मान लीजिए कि आप यूएसए में हैं और ऐसे सर्वर से डेटा प्राप्त कर रहे हैं, जिसमें यूएसए का टाइम ज़ोन है। फिर आपको यूएसए के समय क्षेत्र के अनुसार तारीख और समय मिलेगा। टाइमस्टैम्प डेटा टाइप कॉलम हमेशा अपडेट हो जाता है जब उसकी पंक्ति अपडेट हो जाती है। इसलिए यह ट्रैक करने के लिए उपयोगी हो सकता है जब पिछली बार किसी विशेष पंक्ति को अपडेट किया गया था।
अधिक जानकारी के लिए आप ब्लॉग पोस्ट टाइमस्टैम्प बनाम डेटाटाइम पढ़ सकते हैं ।
SET time_zone = '+0:00';
(यूटीसी के साथ ) सत्र स्तर TIMESTAMP
पर टाइमजोन को परिभाषित कर सकते हैं ( यहां यूटीसी) यह सुनिश्चित करने के लिए कि आपको क्या मिलता है / मूल्यों से निर्धारित होता है और सर्वर time_zone डिफ़ॉल्ट पर निर्भर करता है जो बदल सकता है।
मैं हमेशा यूनिक्स टाइमस्टैम्प का उपयोग करता हूं, बस बहुत सी डेटाइम सूचनाओं से निपटने के लिए, विशेष रूप से टाइमज़ोन के लिए समायोजन करते समय, तिथियों को जोड़ने / घटाना और इसी तरह से काम करते समय पवित्रता बनाए रखने के लिए। टाइमस्टैम्प की तुलना करते समय, यह टाइमज़ोन के जटिल कारकों को बाहर करता है और आपको अपने सर्वर साइड प्रोसेसिंग (चाहे वह एप्लिकेशन कोड या डेटाबेस क्वेरी हो) में संसाधनों को खाली करने की अनुमति देता है, जिसमें आप हल्के वजन के अंकगणित का उपयोग करते हैं, बल्कि इसके बाद भारी समय जोड़ / घटाते हैं कार्य करता है।
विचार करने लायक एक और बात:
यदि आप एक एप्लिकेशन का निर्माण कर रहे हैं, तो आप कभी नहीं जानते कि आपके डेटा का उपयोग लाइन के नीचे कैसे किया जा सकता है। यदि आप कहते हैं, कह रहे हैं, अपने डेटा सेट में रिकॉर्ड की एक गुच्छा की तुलना करें, के साथ, कहते हैं, एक तृतीय-पक्ष एपीआई से आइटम का एक गुच्छा, और कहते हैं, उन्हें कालानुक्रमिक क्रम में रखें, आपको खुशी होगी अपनी पंक्तियों के लिए टाइमस्टैम्प को यूनिक्स करें। यहां तक कि अगर आप MySQL टाइमस्टैम्प का उपयोग करने का निर्णय लेते हैं, तो बीमा के रूप में एक यूनिक्स टाइमस्टैम्प स्टोर करें।
मेरे मामले में, मैंने हर समय के लिए यूटीसी को एक समय क्षेत्र के रूप में सेट किया है: सिस्टम, डेटाबेस सर्वर, आदि जो मैं कर सकता हूं। यदि मेरे ग्राहक को किसी अन्य समय क्षेत्र की आवश्यकता है, तो मैं इसे ऐप पर कॉन्फ़िगर करता हूं।
मैं लगभग हमेशा टाइमस्टैम्प को डेटाइम क्षेत्रों के बजाय पसंद करता हूं, क्योंकि टाइमस्टैम्प में टाइमजोन निहित है। इसलिए, इस समय के बाद से ऐप अलग-अलग समय क्षेत्रों के उपयोगकर्ताओं से एक्सेस किया जाएगा और आप उन्हें अपने स्थानीय समय क्षेत्र में दिनांक और समय देखना चाहते हैं, यह फ़ील्ड प्रकार डेटा को डेटाइम क्षेत्रों में सहेजे जाने की तुलना में इसे करना बहुत आसान बनाता है ।
एक प्लस के रूप में, एक और टाइमज़ोन के साथ सिस्टम के लिए डेटाबेस के प्रवास के मामले में, मुझे टाइमस्टैम्प का उपयोग करके अधिक आत्मविश्वास महसूस होगा। संभव नहीं मुद्दों को कहने के लिए जब दो समय के बीच अंतर की गणना के बीच एक समर समय में परिवर्तन होता है और 1 घंटे या उससे कम की आवश्यकता होती है।
इसलिए, संक्षेप में, मैं टाइमस्टैम्प के इस फायदे को महत्व देता हूं:
इन सभी कारणों से, मैं UTC और टाइमस्टैम्प फ़ील्ड चुनता हूँ जहाँ पॉसिबल होता है। और मैं सिरदर्द से बचता हूं;)
warranties.expires_at
आज की तरह कुछ MySQL टाइमस्टैम्प नहीं हो सकता है।
जब आप किसी तालिका पर अद्यतन कथन करते हैं, तो टाइमस्टैम्प बदलने से सावधान रहें। यदि आपके पास कॉलम 'नाम' (varchar), 'Age' (int), और 'Date_Added' (टाइमस्टैम्प) है और आप निम्नलिखित DML स्टेटमेंट चलाते हैं
UPDATE table
SET age = 30
तब आपके 'Date_Added' कॉलम के प्रत्येक एकल मान को वर्तमान टाइमस्टैम्प में बदल दिया जाएगा।
ON UPDATE CURRENT_TIMESTAMP
मुख्य अंतर:
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
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
| TIMESTAMP | DATETIME |
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
| TIMESTAMP requires 4 bytes. | DATETIME requires 8 bytes. |
| Timestamp is the number of seconds that have elapsed since January 1, 1970 00:00 UTC. | DATETIME is a text displays 'YYYY-MM-DD HH:MM:SS' format. |
| TIMESTAMP supported range: ‘1970-01-01 00:00:01′ UTC to ‘2038-01-19 03:14:07′ UTC. | DATETIME supported range: ‘1000-01-01 00:00:00′ to ‘9999-12-31 23:59:59′ |
| TIMESTAMP during retrieval converted back to the current time zone. | DATETIME can not do this. |
| TIMESTAMP is used mostly for metadata i.e. row created/modified and audit purpose. | DATETIME is used mostly for user-data. |
+---------------------------------------------------------------------------------------+--------------------------------------------------------------------------+
टाइमस्टैम्प और डेटटाइम के बीच एक और अंतर है टाइमस्टैम्प में आप NULL को डिफ़ॉल्ट मान नहीं दे सकते।
CREATE TABLE t2 ( ts1 TIMESTAMP NULL, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
पहला कॉलम NULL मान स्वीकार कर सकता है।
मुझे अनावश्यक ट्रिगर के उपयोग के बिना मौजूदा समय के आधार पर ऑटो अपडेट करने की क्षमता में टाइमस्टैम्प की नायाब उपयोगिता मिली। यह सिर्फ मुझे हालांकि, हालांकि टाइमस्टैम्प यूटीसी है जैसा कि कहा गया था।
यह अलग-अलग टाइमज़ोन पर नज़र रख सकता है, इसलिए यदि आपको उदाहरण के लिए एक सापेक्ष समय प्रदर्शित करने की आवश्यकता है, तो यूटीसी समय वह है जो आप चाहते हैं।
प्रमुख अंतर है
डेटाटाइम इंडेक्सिंग की समस्याओं को देखने के लिए इस पोस्ट को देखें
मैंने datetime
समय क्षेत्र से संबंधित कई समस्याओं और बगों का सामना करने के बाद अपने अनुप्रयोगों में उपयोग करना बंद कर दिया । आईएमएचओ का उपयोग ज्यादातर मामलों में timestamp
बेहतर हैdatetime
।
जब आप पूछते हैं कि समय क्या है? और जवाब '2019-02-05 21:18:30' की तरह आता है, जो पूरा नहीं हुआ है, परिभाषित जवाब नहीं क्योंकि इसमें एक और भाग की कमी है, जिसमें टाइमज़ोन है? वाशिंगटन? मास्को? बीजिंग?
समयक्षेत्र के बिना डेटाटाइम का उपयोग करने का मतलब है कि आपका आवेदन केवल 1 टाइमज़ोन के साथ काम कर रहा है, हालांकि टाइमस्टैम्प आपको datetime
विभिन्न टाइमज़ोन में समय के समान सटीक बिंदु दिखाने के लचीलेपन के लाभ देता है।
यहां कुछ मामले हैं जो आपको उपयोग करने के लिए पछतावा करेंगे datetime
और चाहते हैं कि आपने अपना डेटा टाइमस्टैम्प में संग्रहीत किया।
अपने ग्राहकों के आराम के लिए आप उन्हें अपने पसंदीदा समय क्षेत्रों के आधार पर उन्हें गणित किए बिना दिखाना चाहते हैं और समय को उनके सार्थक समयक्षेत्र में बदल सकते हैं। आपको केवल समय-क्षेत्र बदलने की आवश्यकता है और आपके सभी एप्लिकेशन कोड समान होंगे। (वास्तव में आपको हमेशा आवेदन की शुरुआत में टाइमज़ोन को परिभाषित करना चाहिए, या PHP अनुप्रयोगों के मामले में प्रसंस्करण का अनुरोध करना चाहिए)
SET time_zone = '+2:00';
आपने उस देश को बदल दिया जिसमें आप रहते हैं और डेटा को बनाए रखने का अपना काम जारी रखते हैं जबकि इसे एक अलग समय-क्षेत्र (वास्तविक डेटा को बदले बिना) में देखते हैं।
datetime
= आवेदन 1 टाइमज़ोन का समर्थन करता है (डालने और चयन दोनों के लिए)
timestamp
= आवेदन किसी भी समयक्षेत्र का समर्थन करता है (डालने और चयन दोनों के लिए)
यह उत्तर केवल समय क्षेत्र की बात होने पर लचीलेपन और टाइमस्टैम्प की आसानी पर कुछ प्रकाश डालने के लिए है, यह कॉलम आकार या रेंज या अंश जैसे किसी भी अन्य अंतर को कवर नहीं कर रहा है ।
date
, और अन्य फ़ील्ड timestamp
एक तालिका में उपयोग करते हैं । मुझे लगता है कि यह एक नई समस्या का कारण बनेगा क्योंकि जो डेटा फ़िल्टर किया where
जाता है वह टाइमज़ोन परिवर्तनों के अनुसार नहीं है।
date
क्वेरी भेजने से पहले कॉलम पर टाइमज़ोन समस्या को ठीक करना चाहिए ।
A TIMESTAMP
को 4 बाइट्स की आवश्यकता होती है, जबकि DATETIME
8 बाइट्स की आवश्यकता होती है।
मुझे यूनिक्स टाइमस्टैम्प पसंद है, क्योंकि आप संख्याओं में बदल सकते हैं और बस संख्या के बारे में चिंता कर सकते हैं। इसके अलावा आप जोड़ / घटाना और अवधि प्राप्त करना, आदि तो परिणाम को दिनांक जो भी स्वरूप में परिवर्तित करें। यह कोड पता करता है कि किसी दस्तावेज़ से टाइमस्टैम्प और वर्तमान समय के बीच मिनटों में कितना समय बीत गया।
$date = $item['pubdate']; (etc ...)
$unix_now = time();
$result = strtotime($date, $unix_now);
$unix_diff_min = (($unix_now - $result) / 60);
$min = round($unix_diff_min);