दोनों डेटा प्रकार डेटा को "YYYY-MM-DD HH:MM:SS" प्रारूप में संग्रहीत करते हैं और इसमें दिनांक और समय शामिल होता है। इन समानताओं के बावजूद उनमें निम्नलिखित अंतर हैं -
- रेंज - डेटाटाइम डेटा प्रकार 1000-01-01 00:00:00 और 9999-12-31 23:59:59 के बीच की सीमा में समय के साथ एक तिथि का समर्थन करता है। लेकिन टाइमस्टैम्प डेटा प्रकार '1970-01-01 00:00:01' से '2038-01-19 08:44:07' के बीच की सीमा में समय के साथ दिनांक का समर्थन करता है।
- आकार - भिन्नात्मक सेकंड के डेटा भंडारण के लिए डेटाटाइम को 3 अतिरिक्त बाइट्स के साथ 5 बाइट्स की आवश्यकता होती है। दूसरी ओर, टाइमस्टैम्प डेटाटाइप को फ्रैक्शनल सेकंड के डेटा भंडारण के लिए 4 बाइट्स के साथ-साथ 3 अतिरिक्त बाइट्स की आवश्यकता होती है। लेकिन MySQL 5.6.4 से पहले, डेटटाइम को फ्रैक्शनल सेकंड्स के डेटा स्टोर करने के लिए 3 अतिरिक्त बाइट्स के साथ 8 बाइट्स की आवश्यकता होती है।
- एक समय क्षेत्र से दूसरे समय क्षेत्र में रूपांतरण - दरअसल MySQL5+ में, टाइमस्टैम्प मान वर्तमान समय से UTC में परिवर्तित हो जाता है और इसके विपरीत, जबकि डेटाटाइम कोई रूपांतरण नहीं करता है।
- अनुक्रमण - इंडेक्सिंग टाइमस्टैम्प डेटा पर की जा सकती है लेकिन डेटाटाइम डेटा को इंडेक्स नहीं किया जा सकता है।
- क्वेरी की कैशिंग - टाइमस्टैम्प डेटाटाइप वाले प्रश्नों को कैश किया जा सकता है लेकिन डेटाटाइम डेटाटाइप वाले प्रश्नों को कैश नहीं किया जा सकता है।
ऊपर DATETIME और TIMESTAMP डेटाटाइप के बीच कुछ प्रमुख अंतर थे और निम्न उदाहरण इसे प्रदर्शित करेगा -
उदाहरण
mysql> Create table test_datetime(time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); Query OK, 0 rows affected (0.44 sec) mysql> INSERT INTO test_datetime (time) values (CURRENT_TIMESTAMP); Query OK, 1 row affected (0.04 sec) mysql> Select * from test_datetime; +---------------------+ | time | +---------------------+ | 2017-11-14 17:29:03 | +---------------------+ 1 row in set (0.00 sec) mysql> Create table test_timestamp(time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); Query OK, 0 rows affected (0.64 sec) mysql> INSERT INTO test_timestamp (time) values (CURRENT_TIMESTAMP); Query OK, 1 row affected (0.06 sec) mysql> Select * from test_timestamp; +---------------------+ | time | +---------------------+ | 2017-11-14 17:29:50 | +---------------------+ 1 row in set (0.00 sec)
अब, निम्नलिखित क्वेरी में हमने टाइमज़ोन को UTC-05:00 में बदल दिया है और परिणाम TIMESTAMP डेटाटाइप वाली तालिका के लिए बदल दिया गया है।
mysql> SET @@session.time_zone = '-5:00'; Query OK, 0 rows affected (0.00 sec) mysql> Select * from test_timestamp; +---------------------+ | time | +---------------------+ | 2017-11-14 06:59:50 | +---------------------+ 1 row in set (0.00 sec)
आउटपुट
mysql> Select * from test_datetime; +---------------------+ | time | +---------------------+ | 2017-11-14 17:29:03 | +---------------------+ 1 row in set (0.00 sec)