दोनों डेटा टाइप डेटा को "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' से '2038-01-19 08:44:07' के बीच सपोर्ट करता है।
- आकार - DATETIME को 5 बाइट्स (+3 बाइट्स फ्रैक्शनल सेकंड के लिए) चाहिए। TIMESTAMP को 4 बाइट्स (+3 बाइट्स फ्रैक्शनल सेकंड के लिए) चाहिए। MySQL 5.6.4 से पहले DATETIME को 8 बाइट्स (+3 बाइट्स) चाहिए थे।
- टाइमज़ोन कन्वर्ज़न - MySQL 5+ में, TIMESTAMP मान करंट टाइम ज़ोन से UTC में और इसके विपरीत कन्वर्ट होता है, जबकि DATETIME कोई कन्वर्ज़न नहीं करता।
- इंडेक्सिंग - TIMESTAMP डेटा पर इंडेक्सिंग की जा सकती है लेकिन DATETIME डेटा पर नहीं।
- क्वेरी कैशिंग - TIMESTAMP डेटा टाइप वाले क्वेरी कैश हो सकते हैं लेकिन DATETIME वाले नहीं।
उपरोक्त 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)
सारांश: TIMESTAMP टाइमज़ोन-संवेदनशील है (UTC में स्टोर, सेशन टाइमज़ोन में प्रदर्शित), DATETIME टाइमज़ोन-अज्ञेय है। लॉगिंग के लिए TIMESTAMP, ऐतिहासिक/भविष्य की डेट के लिए DATETIME चुनें।