- 1 1. MySQL TIMESTAMP क्या है?
- 2 2. TIMESTAMP का बुनियादी उपयोग
- 3 3. TIMESTAMP और टाइम ज़ोन के साथ काम करना
- 4 4. Year 2038 समस्या और इसका प्रभाव
- 5 5. TIMESTAMP प्रकार के व्यावहारिक उपयोग केस
- 6 6. TIMESTAMP प्रकार का उपयोग करते समय महत्वपूर्ण नोट्स
- 7 7. सारांश और सिफ़ारिशें
- 8 8. अक्सर पूछे जाने वाले प्रश्न (FAQ)
- 8.1 मुझे TIMESTAMP और DATETIME में से कैसे चुनना चाहिए?
- 8.2 क्या यह सच है कि TIMESTAMP को 2038 के बाद उपयोग नहीं किया जा सकता?
- 8.3 मैं TIMESTAMP कॉलम में NULL मान कैसे अनुमति दे सकता हूँ?
- 8.4 यदि मैं टाइम ज़ोन सेटिंग बदलूँ, तो क्या यह मौजूदा TIMESTAMP डेटा को प्रभावित करेगा?
- 8.5 यदि मैं CURRENT_TIMESTAMP का उपयोग करूँ, तो क्या मैं अभी भी एक विशिष्ट datetime डाल सकता हूँ?
1. MySQL TIMESTAMP क्या है?
MySQL में TIMESTAMP डेटा टाइप को UTC (Coordinated Universal Time) में किसी विशिष्ट समय बिंदु को संग्रहीत करने के लिए डिज़ाइन किया गया है और डेटा को सहेजते और पुनः प्राप्त करते समय समय क्षेत्र परिवर्तन को स्वचालित रूप से संभालता है। यह डेटा टाइप जनवरी 1, 1970 से जनवरी 19, 2038 तक की तिथियों और समय को संभाल सकता है। जब डेटा को डेटाबेस में सहेजा जाता है, तो TIMESTAMP वर्तमान समय क्षेत्र का उपयोग करता है, और जब डेटा पुनः प्राप्त किया जाता है, तो यह सिस्टम समय क्षेत्र के आधार पर स्वचालित रूप से परिवर्तित हो जाता है।
TIMESTAMP और DATETIME के बीच अंतर
DATETIME डेटा टाइप को अक्सर TIMESTAMP से तुलना की जाती है। DATETIME तिथि और समय मानों को “जैसा है” वैसा ही संग्रहीत करता है, इसलिए संग्रहीत डेटा समय क्षेत्रों से प्रभावित नहीं होता। इसके विपरीत, TIMESTAMP को संग्रहीत करने पर UTC में परिवर्तित किया जाता है और पुनः प्राप्त करने पर सिस्टम समय क्षेत्र में वापस बदला जाता है, जिससे विभिन्न वातावरणों में समय अंतर को रोकने में मदद मिलती है।
उदाहरण के लिए, TIMESTAMP सिस्टम माइग्रेशन के दौरान या कई समय क्षेत्रों वाले डेटाबेस के साथ काम करते समय विशेष रूप से उपयोगी होता है। DATETIME का रेंज अधिक विस्तृत है—वर्ष 1000 से 9999 तक—इसलिए अक्सर Year 2038 समस्या से बचने के लिए इसका उपयोग किया जाता है।
TIMESTAMP का उदाहरण उपयोग
आप TIMESTAMP का उपयोग करके नीचे दिखाए अनुसार एक टेबल बना सकते हैं।
CREATE TABLE events (
id INT AUTO_INCREMENT PRIMARY KEY,
event_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
इस उदाहरण में, event_time कॉलम रिकॉर्ड के इन्सर्ट होने पर स्वचालित रूप से वर्तमान समय संग्रहीत करता है, और प्रत्येक बार रिकॉर्ड अपडेट होने पर उस मान को ओवरराइट कर देता है।
2. TIMESTAMP का बुनियादी उपयोग
MySQL में TIMESTAMP का उपयोग करते समय मानों को इन्सर्ट और रिट्रीव करने के बुनियादी तरीकों को समझना महत्वपूर्ण है। नीचे TIMESTAMP डेटा के साथ काम करने के कई सामान्य तरीकों का विवरण दिया गया है।
तिथि और समय इन्सर्ट करना
TIMESTAMP कॉलम में डेटा इन्सर्ट करते समय आप आमतौर पर तिथि और समय को स्ट्रिंग फ़ॉर्मेट में निर्दिष्ट करते हैं। तिथि को “YYYY-MM-DD” और समय को “hh:mm:ss” के रूप में दर्शाया जाता है।
INSERT INTO events (event_time) VALUES ('2023-10-01 12:30:00');
यह SQL स्टेटमेंट 1 अक्टूबर, 2023 को 12:30:00 को event_time कॉलम में इन्सर्ट करता है।
वर्तमान समय इन्सर्ट करना
MySQL के NOW() फ़ंक्शन का उपयोग करके आप आसानी से वर्तमान तिथि और समय प्राप्त कर सकते हैं। यह फ़ंक्शन सिस्टम समय क्षेत्र के आधार पर वर्तमान तिथि और समय लौटाता है, और आप इसे सीधे TIMESTAMP कॉलम में इन्सर्ट कर सकते हैं।
INSERT INTO events (event_time) VALUES (NOW());
इस उदाहरण में, SQL के निष्पादित होने के क्षण का वर्तमान समय स्वचालित रूप से इन्सर्ट हो जाता है।
ऑटो-अपडेट फीचर का उपयोग करना
यदि आप किसी TIMESTAMP कॉलम के लिए ON UPDATE CURRENT_TIMESTAMP निर्दिष्ट करते हैं, तो रिकॉर्ड के प्रत्येक अपडेट पर अपडेट समय स्वचालित रूप से रिकॉर्ड हो जाता है।
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
order_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
इस टेबल में, order_time रिकॉर्ड के निर्माण के समय वर्तमान समय पर सेट होता है, और प्रत्येक बार रिकॉर्ड अपडेट होने पर यह अपडेट हो जाता है।

3. TIMESTAMP और टाइम ज़ोन के साथ काम करना
TIMESTAMP की सबसे बड़ी विशेषताओं में से एक टाइम ज़ोन हैंडलिंग है। संग्रहीत डेटा हमेशा UTC में परिवर्तित किया जाता है, और जब आप इसे डेटाबेस से पुनः प्राप्त करते हैं, तो यह फिर से सिस्टम टाइम ज़ोन के अनुसार परिवर्तित हो जाता है।
टाइम ज़ोन सेटिंग कैसे जांचें
MySQL में आप सर्वर स्तर या सत्र स्तर पर टाइम ज़ोन सेट कर सकते हैं। आप SHOW VARIABLES कमांड का उपयोग करके टाइम ज़ोन सेटिंग की जाँच कर सकते हैं।
SHOW VARIABLES LIKE 'time_zone';
यह कमांड डेटाबेस के लिए वर्तमान में कॉन्फ़िगर किए गए टाइम ज़ोन को लौटाता है। टाइम ज़ोन बदलने के लिए, नीचे दिया गया स्टेटमेंट उपयोग करें।
SET time_zone = '+09:00';
TIMESTAMP और DATETIME के बीच टाइम ज़ोन अंतर
DATETIME प्रकार तिथि और समय को बिना टाइम ज़ोन को ध्यान में रखे संग्रहीत करता है, जबकि TIMESTAMP प्रकार सहेजते समय UTC में परिवर्तित हो जाता है। इसलिए, जहाँ कई टाइम ज़ोन एक साथ मौजूद होते हैं, ऐसे वातावरण में TIMESTAMP अक्सर बेहतर विकल्प होता है।
4. Year 2038 समस्या और इसका प्रभाव
2038 वर्ष की समस्या 32‑बिट सिस्टम पर TIMESTAMP प्रकार की सीमा के कारण उत्पन्न होती है। MySQL का TIMESTAMP प्रकार 1 जनवरी 1970 को 00:00:00 UTC से बीते सेकंडों की संख्या पर आधारित है। जब यह 19 जनवरी 2038 को 03:14:07 UTC से अधिक हो जाता है, तो यह मान ओवरफ़्लो हो जाता है।
2038 वर्ष की समस्या से कैसे बचें
इस समस्या से बचने के लिए 64‑बिट सिस्टम या व्यापक‑रेंज वाले DATETIME प्रकार का उपयोग करने की सलाह दी जाती है। DATETIME वर्ष 1000 से 9999 तक की तिथियों और समय को संभाल सकता है, इसलिए इसे 2038 के बाद भी सुरक्षित रूप से उपयोग किया जा सकता है।
आप अपने सिस्टम को अपग्रेड करके भी इस समस्या से बच सकते हैं। चूँकि 64‑बिट सिस्टम में 2038 वर्ष की सीमा नहीं होती, इसलिए अपने डेटाबेस और एप्लिकेशन को अपग्रेड करने पर विचार करना महत्वपूर्ण है।
5. TIMESTAMP प्रकार के व्यावहारिक उपयोग केस
MySQL का TIMESTAMP प्रकार केवल बुनियादी तिथि‑समय मानों को संग्रहीत करने के लिए ही नहीं, बल्कि विभिन्न व्यावहारिक पैटर्न को भी समर्थन देता है, जैसे कि वर्तमान समय को स्वचालित रूप से सम्मिलित या अपडेट करना। यहाँ कुछ सामान्य उन्नत उपयोग केस दिए गए हैं।
वर्तमान समय को स्वचालित रूप से सम्मिलित करना
जब आप एक TIMESTAMP कॉलम परिभाषित करते हैं, तो आप डिफ़ॉल्ट मान के रूप में CURRENT_TIMESTAMP सेट कर सकते हैं, जिससे नया रिकॉर्ड बनते ही वर्तमान तिथि‑समय स्वचालित रूप से सम्मिलित हो जाता है। उदाहरण के लिए, एक ऐसी तालिका बनाना जो ऑर्डर के होने का समय स्वचालित रूप से रिकॉर्ड करे, आप निम्नलिखित कर सकते हैं।
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
order_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
अपडेट समय को स्वचालित रूप से रिकॉर्ड करना
ON UPDATE CURRENT_TIMESTAMP निर्दिष्ट करने पर, प्रत्येक बार रिकॉर्ड अपडेट होने पर अपडेट समय स्वचालित रूप से रिकॉर्ड हो जाता है। इससे अपडेट इतिहास को स्वचालित रूप से प्रबंधित करना आसान हो जाता है।
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50),
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
कई TIMESTAMP कॉलम का उपयोग
MySQL में आप तालिका में कई TIMESTAMP कॉलम शामिल कर सकते हैं, लेकिन डिफ़ॉल्ट रूप से केवल एक कॉलम को CURRENT_TIMESTAMP डिफ़ॉल्ट मान मिल सकता है। यदि आप कई टाइमस्टैम्प को स्वचालित रूप से प्रबंधित करना चाहते हैं, तो अन्य कॉलमों के लिए स्पष्ट रूप से मान सेट करें या DATETIME प्रकार का उपयोग करें।
CREATE TABLE posts (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
6. TIMESTAMP प्रकार का उपयोग करते समय महत्वपूर्ण नोट्स
TIMESTAMP प्रकार का उपयोग करते समय कई महत्वपूर्ण बिंदुओं को समझना आवश्यक है। इन बातों को जानने से अप्रत्याशित असंगतियों और त्रुटियों से बचा जा सकता है।
NULL प्रतिबंध और डिफ़ॉल्ट मान
डिफ़ॉल्ट रूप से TIMESTAMP कॉलम पर NOT NULL प्रतिबंध लागू होता है। अर्थात्, यदि आप NULL मानों की अनुमति देना चाहते हैं, तो आपको स्पष्ट रूप से DEFAULT NULL निर्दिष्ट करना होगा।
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
log_time TIMESTAMP DEFAULT NULL
);
आप डिफ़ॉल्ट रूप से DEFAULT 0 भी सेट कर सकते हैं, जिससे 0000-00-00 00:00:00 जैसा अमान्य datetime मान बनता है। हालांकि, यह अनुशंसित नहीं है। MySQL के स्ट्रिक्ट SQL मोड में यह अमान्य datetime त्रुटियों का कारण बन सकता है।
0000-00-00 00:00:00 समस्या
कुछ MySQL संस्करण 0000-00-00 00:00:00 को एक अमान्य datetime मान के रूप में समर्थन करते हैं, लेकिन वास्तविक सिस्टम में यह संचालन संबंधी समस्याएँ उत्पन्न कर सकता है। विशेष रूप से, डेटा इंटेग्रिटी को प्राथमिकता देने वाले सिस्टम को ऐसे अमान्य मानों से बचना चाहिए। इसके बजाय NULL या उपयुक्त डिफ़ॉल्ट मान का उपयोग करने की सलाह दी जाती है।
CREATE TABLE sessions (
id INT AUTO_INCREMENT PRIMARY KEY,
start_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
end_time TIMESTAMP NULL
);
सिस्टम टाइम ज़ोन का प्रभाव
चूँकि TIMESTAMP प्रकार को UTC में परिवर्तित करके संग्रहीत किया जाता है, इसलिए विभिन्न टाइम ज़ोन में डेटाबेस को माइग्रेट करते समय सावधानी बरतनी चाहिए। यदि सर्वर टाइम ज़ोन सेटिंग बदलती है, तो प्राप्त समय अनपेक्षित मान बन सकते हैं। टाइम ज़ोन को सटीक रूप से प्रबंधित करना महत्वपूर्ण है।
SET time_zone = 'Asia/Tokyo';
यह कमांड डेटाबेस टाइम ज़ोन को टोक्यो पर सेट करता है और UTC से रूपांतरणों के सटीक प्रबंधन को सुनिश्चित करता है।

7. सारांश और सिफ़ारिशें
TIMESTAMP प्रकार MySQL में तिथियों और समय को कुशलतापूर्वक प्रबंधित करने के लिए एक शक्तिशाली उपकरण है। विशेष रूप से, टाइम ज़ोन के साथ स्वचालित रूपांतरण और निर्माण/अपडेट पर स्वचालित समय रिकॉर्डिंग बहुत सुविधाजनक हैं। हालांकि, 2038 वर्ष की समस्या और NULL मानों के संभालने जैसे सीमाओं और सावधानियों को समझना महत्वपूर्ण है।
कब TIMESTAMP का उपयोग करें
- जब आपको ऑटो‑अपडेट व्यवहार चाहिए , तो
TIMESTAMPआदर्श है—विशेषकर यदि आप चाहते हैं कि हर बार रिकॉर्ड अपडेट होने पर टाइमस्टैम्प स्वचालित रूप से रिकॉर्ड हो। - ऐसे सिस्टम में जो टाइम ज़ोन को ध्यान में रखते हैं ,
TIMESTAMPका UTC‑आधारित रूपांतरण व्यवहार सहायक होता है। - दूसरी ओर, यदि आपको भविष्य‑सुरक्षित रेंज चाहिए या समर्थित रेंज (2038 के बाद) के बाहर की तिथियों को संभालना है, तो
DATETIMEका उपयोग करने पर विचार करें।
अंत में, डेटा की अखंडता और रखरखाव को सुनिश्चित करने के लिए अपने सिस्टम की आवश्यकताओं के आधार पर TIMESTAMP और DATETIME में से चुनें।
8. अक्सर पूछे जाने वाले प्रश्न (FAQ)
MySQL TIMESTAMP से संबंधित प्रश्न और समस्याएँ डेवलपर्स में आम हैं, इसलिए यह अनुभाग अक्सर पूछे जाने वाले प्रश्नों का सारांश प्रस्तुत करता है। ये FAQs TIMESTAMP को सही ढंग से संभालने के लिए उपयोगी टिप्स और समाधान प्रदान करते हैं।
मुझे TIMESTAMP और DATETIME में से कैसे चुनना चाहिए?
TIMESTAMP स्वचालित रूप से UTC का उपयोग करके टाइम ज़ोन के आधार पर मानों को रूपांतरित करता है, इसलिए यह उन अनुप्रयोगों और सिस्टमों के लिए उपयुक्त है जिन्हें कई टाइम ज़ोन को ध्यान में रखना पड़ता है। यह रिकॉर्ड बनते या अपडेट होते समय तिथि/समय मानों को स्वचालित रूप से सहेजने का भी समर्थन करता है। इसके विपरीत, DATETIME मानों को “जैसा है” संग्रहीत करता है, इसलिए यह तब बेहतर है जब आपको टाइम ज़ोन रूपांतरण के बिना सुसंगत datetime प्रबंधन चाहिए।
क्या यह सच है कि TIMESTAMP को 2038 के बाद उपयोग नहीं किया जा सकता?
हाँ। वर्ष 2038 समस्या 32‑बिट TIMESTAMP प्रकार पर लागू होती है। चूँकि यह 1 जनवरी 1970 से सेकंडों की संख्या पर आधारित है, यह 19 जनवरी 2038 के बाद की तिथियों को दर्शा नहीं सकता। इसे टालने के लिए, 64‑बिट सिस्टम में माइग्रेट करना या DATETIME प्रकार का उपयोग करना अनुशंसित है।
मैं TIMESTAMP कॉलम में NULL मान कैसे अनुमति दे सकता हूँ?
TIMESTAMP कॉलम में NULL मानों की अनुमति देने के लिए, आपको स्पष्ट रूप से DEFAULT NULL निर्दिष्ट करना होगा, जैसा कि नीचे दिखाया गया है।
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
log_time TIMESTAMP DEFAULT NULL
);
इस सेटिंग के साथ, यदि आप कोई datetime निर्दिष्ट किए बिना रिकॉर्ड डालते हैं, तो NULL मान संग्रहीत होगा।
यदि मैं टाइम ज़ोन सेटिंग बदलूँ, तो क्या यह मौजूदा TIMESTAMP डेटा को प्रभावित करेगा?
TIMESTAMP मानों को संग्रहीत करते समय UTC में रूपांतरित किया जाता है, इसलिए टाइम ज़ोन सेटिंग बदलने से डेटा को पुनः प्राप्त करने पर उसका प्रदर्शित रूप बदलता है। मूल डेटा अभी भी UTC में संग्रहीत रहता है, लेकिन नई टाइम ज़ोन के आधार पर रूपांतरित किया जाता है, जिससे प्राप्त समय मान बदलते हैं। डेटा को सुसंगत रखने के लिए सिस्टम में टाइम ज़ोन सेटिंग्स को मानकीकृत करना महत्वपूर्ण है।
यदि मैं CURRENT_TIMESTAMP का उपयोग करूँ, तो क्या मैं अभी भी एक विशिष्ट datetime डाल सकता हूँ?
CURRENT_TIMESTAMP रिकॉर्ड के सम्मिलित होने पर वर्तमान समय को स्वचालित रूप से डालता है, लेकिन आप NOW() या स्ट्रिंग लिटरल का उपयोग करके स्पष्ट रूप से एक विशिष्ट datetime भी डाल सकते हैं।
INSERT INTO events (event_time) VALUES ('2023-10-01 12:30:00');
इस प्रकार, CURRENT_TIMESTAMP का उपयोग करते समय भी आप मैन्युअल रूप से datetime डाल सकते हैं।


