MySQL DATETIME समझाया गया: डेटा प्रकार, रेंज, और सर्वोत्तम प्रथाएँ

.## 1. MySQL DATETIME क्या है?

MySQL DATETIME एक डेटा टाइप है जिसका उपयोग एक ही फ़ील्ड में तिथि और समय दोनों को संग्रहीत करने के लिए किया जाता है। डेटाबेस में तिथि और समय मानों का प्रबंधन कई अनुप्रयोगों के लिए आवश्यक है, जैसे लॉगिंग और आरक्षण प्रणाली। DATETIME प्रकार तिथि और समय को साथ में संग्रहीत करता है और मानों की एक विस्तृत श्रृंखला का समर्थन करता है। इसकी सीमा '1000-01-01 00:00:00' से '9999-12-31 23:59:59' तक है, और यह अंशीय सेकंड भी समर्थन करता है।

目次

2. MySQL तिथि और समय डेटा टाइप्स का अवलोकन

2.1 तिथियों और समय को संभालने के लिए डेटा टाइप्स

MySQL तिथियों और समय के साथ काम करने के लिए निम्नलिखित डेटा टाइप्स प्रदान करता है:

  • DATE : तिथि (वर्ष, माह, दिन) संग्रहीत करता है। सीमा '1000-01-01' से '9999-12-31' तक है।
  • TIME : केवल समय संग्रहीत करता है। सीमा '-838:59:59' से '838:59:59' तक है।
  • DATETIME : तिथि और समय दोनों संग्रहीत करता है। सीमा '1000-01-01 00:00:00' से '9999-12-31 23:59:59' तक है।
  • TIMESTAMP : UNIX टाइमस्टैम्प संग्रहीत करता है। सीमा '1970-01-01 00:00:01' से '2038-01-19 03:14:07' तक है।

2.2 DATETIME और TIMESTAMP के बीच अंतर

DATETIME और TIMESTAMP समान हैं, लेकिन इनके बीच निम्नलिखित अंतर हैं:

  • समय क्षेत्र : DATETIME एक स्थिर मान संग्रहीत करता है जो समय क्षेत्रों पर निर्भर नहीं करता। इसके विपरीत, TIMESTAMP को संग्रहीत करते समय UTC में परिवर्तित किया जाता है और पुनः प्राप्त करते समय सर्वर के वर्तमान समय क्षेत्र में बदला जाता है। इसलिए, DATETIME समय क्षेत्र‑स्वतंत्र तिथि/समय मानों (जैसे इवेंट समय) के लिए उपयुक्त है, जबकि TIMESTAMP सर्वर समय क्षेत्र से जुड़ी डेटा (जैसे लॉग) के लिए उपयुक्त है।
  • संग्रहण प्रारूप : DATETIME जैसा का वैसा संग्रहीत होता है, जबकि TIMESTAMP को UNIX टाइमस्टैम्प के रूप में संग्रहीत किया जाता है। परिणामस्वरूप, TIMESTAMP मान सर्वर के समय क्षेत्र सेटिंग्स से प्रभावित होते हैं जब समय का प्रतिनिधित्व किया जाता है।

3. MySQL में DATETIME का उपयोग कैसे करें

3.1 DATETIME कॉलम बनाना

DATETIME प्रकार के साथ एक कॉलम बनाने के लिए, निम्नलिखित SQL सिंटैक्स का उपयोग करें:

CREATE TABLE sample_table (
    event_time DATETIME
);

इस उदाहरण में, sample_table नामक तालिका में event_time नाम का DATETIME कॉलम बनाया गया है।

3.2 DATETIME मान सम्मिलित करना

MySQL DATETIME मान विभिन्न स्वरूपों में सम्मिलित किए जा सकते हैं। मूल स्वरूप 'YYYY-MM-DD HH:MM:SS' है। उदाहरण के लिए:

INSERT INTO sample_table (event_time) VALUES ('2024-09-16 14:30:00');

निम्नलिखित स्वरूप भी स्वीकार्य हैं:

  • 'YY-MM-DD HH:MM:SS' : 2-अंकीय वर्ष वाला स्वरूप।
  • 'YYYYMMDDHHMMSS' : बिना विभाजकों वाला स्वरूप।

उदाहरण:

INSERT INTO sample_table (event_time) VALUES ('24-09-16 14:30:00');
INSERT INTO sample_table (event_time) VALUES (20240916143000);

इन स्वरूपों में सम्मिलित डेटा सही ढंग से संग्रहीत हो जाएगा। यदि वर्ष दो अंकों में दिया गया है, तो '70-99' को 1970-1999 में और '00-69' को 2000-2069 में परिवर्तित किया जाता है।

3.3 DATETIME मान प्राप्त करना

जब DATETIME मान प्राप्त किए जाते हैं, तो MySQL उन्हें डिफ़ॉल्ट 'YYYY-MM-DD HH:MM:SS' स्वरूप में प्रदर्शित करता है। उदाहरण के लिए:

SELECT event_time FROM sample_table;

यह क्वेरी मानक स्वरूप का उपयोग करके DATETIME कॉलम के मानों को प्रदर्शित करती है।

4. अंशीय सेकंड के साथ काम करना

4.1 DATETIME सटीकता

MySQL में, DATETIME मान अंशीय सेकंड शामिल कर सकते हैं। आप fsp विकल्प का उपयोग करके सटीकता निर्दिष्ट कर सकते हैं, जिससे 0 से 6 अंकों तक के अंशीय सेकंड संग्रहीत किए जा सकते हैं। उदाहरण के लिए, 3 अंकों के अंशीय सेकंड के साथ एक कॉलम बनाने के लिए:

CREATE TABLE precise_times (
    event_time DATETIME(3)
);

इस उदाहरण में, event_time कॉलम अधिकतम 3 अंकों तक के अंशीय सेकंड संग्रहीत कर सकता है।

4.2 अंशीय सेकंड के साथ मान सम्मिलित करना

अंशीय सेकंड सहित DATETIME मान सम्मिलित करने के लिए, निम्नलिखित का उपयोग करें:

INSERT INTO precise_times (event_time) VALUES ('2024-09-16 14:30:00.123');

.यह क्वेरी मान को फ्रैक्शनल सेकंड सहित सटीक रूप से संग्रहीत करती है। फ्रैक्शनल भाग को बिना कटे संग्रहीत किया जाता है, और मान को पुनः प्राप्त करते समय सटीकता बरकरार रहती है।

5. DATETIME के लिए सर्वोत्तम प्रथाएँ

5.1 DATETIME और TIMESTAMP के बीच चयन

  • DATETIME कब उपयोग करें : उन स्थिर तिथि/समय मानों के लिए जो टाइम ज़ोन पर निर्भर नहीं होते (उदाहरण के लिए, इवेंट की शुरुआत का समय या आरक्षण तिथियाँ)।
  • TIMESTAMP कब उपयोग करें : सर्वर टाइम ज़ोन से संबंधित तिथि/समय डेटा के लिए (उदाहरण के लिए, रिकॉर्ड निर्माण या अपडेट टाइमस्टैम्प)।

5.2 टाइम ज़ोन प्रबंधन

DATETIME टाइम ज़ोन जानकारी संग्रहीत नहीं करता, इसलिए आपके एप्लिकेशन को टाइम ज़ोन को अलग से प्रबंधित करना होगा। दूसरी ओर, TIMESTAMP मानों को संग्रहीत और पुनः प्राप्त करते समय सर्वर के टाइम ज़ोन को स्वचालित रूप से ध्यान में रखता है, जिससे यह विश्व भर में विभिन्न टाइम ज़ोन वाले सिस्टमों के लिए उपयुक्त बनता है।

6. सामान्य गलतियाँ और उन्हें कैसे टालें

6.1 शून्य तिथियाँ और अमान्य मान

MySQL में, यदि आप एक अमान्य DATETIME मान डालने का प्रयास करते हैं, तो '0000-00-00 00:00:00' जैसी शून्य तिथि संग्रहीत हो सकती है। चूँकि यह आम तौर पर वैध तिथि नहीं होती, आपको इनपुट डेटा को वैध करने के लिए सत्यापन करना चाहिए ताकि अमान्य मान न डाले जाएँ। ऐसा सत्यापन लागू करने से जो इनपुट को सही रेंज और फ़ॉर्मेट में होने को सुनिश्चित करता है, शून्य तिथियों के संग्रहीत होने से बचा जा सकता है।

6.2 सटीकता (Precision) का दुरुपयोग

फ्रैक्शनल सेकंड की सटीकता निर्दिष्ट करते समय, गलत सटीकता का उपयोग अप्रत्याशित परिणाम दे सकता है। केवल आवश्यक होने पर ही फ्रैक्शनल सेकंड की सटीकता सेट करें, और fsp मान को सावधानीपूर्वक चुनें। उदाहरण के लिए, यदि आपके एप्लिकेशन को सब‑सेकंड सटीकता की आवश्यकता नहीं है, तो आपको DATETIME कॉलम में फ्रैक्शनल सेकंड जोड़ने की ज़रूरत नहीं है।

7. सारांश

इस लेख में, हमने MySQL के DATETIME प्रकार को विस्तार से समझाया है। DATETIME तिथि और समय दोनों को संग्रहीत करने के लिए एक बहुत उपयोगी डेटा प्रकार है, और यह उन मानों को संग्रहीत करने के लिए उपयुक्त है जो टाइम ज़ोन से प्रभावित नहीं होने चाहिए। DATETIME और TIMESTAMP के बीच अंतर, टाइम ज़ोन कैसे काम करते हैं, और फ्रैक्शनल सेकंड का उपयोग कैसे करें, इसे समझकर आप अपने डेटाबेस में तिथि/समय डेटा को अधिक प्रभावी ढंग से प्रबंधित कर सकते हैं। साथ ही, सामान्य गलतियों और उन्हें कैसे टालें, जानने से डेटा की स्थिरता और विश्वसनीयता बनाए रखने में मदद मिलती है।

8. अक्सर पूछे जाने वाले प्रश्न (FAQ)

प्रश्न 1: DATETIME और TIMESTAMP के बीच मुख्य अंतर क्या है?

DATETIME एक स्थिर तिथि और समय संग्रहीत करता है जो टाइम ज़ोन पर निर्भर नहीं होता। उदाहरण के लिए, यह आरक्षण तिथियों या इवेंट समय को संग्रहीत करने के लिए उपयुक्त है जो किसी भी टाइम ज़ोन में समान रहना चाहिए। इसके विपरीत, TIMESTAMP UTC में संग्रहीत होता है और पुनः प्राप्त करने पर सर्वर के टाइम ज़ोन में परिवर्तित हो जाता है। यह लॉग्स जैसे सर्वर टाइम ज़ोन पर निर्भर तिथि/समय डेटा के लिए उपयुक्त है।

प्रश्न 2: मैं DATETIME के साथ फ्रैक्शनल सेकंड कैसे संग्रहीत कर सकता हूँ?

आप DATETIME कॉलम बनाते समय fsp मान निर्दिष्ट करके फ्रैक्शनल सेकंड की सटीकता सेट कर सकते हैं। उदाहरण के लिए, DATETIME(3) फ्रैक्शनल सेकंड को अधिकतम 3 अंकों तक संग्रहीत करता है। सम्मिलित करते समय फ्रैक्शनल सेकंड सहित सही फ़ॉर्मेट वाला मान उपयोग करें, और यह सही ढंग से संग्रहीत हो जाएगा।

प्रश्न 3: मुझे DATETIME या TIMESTAMP में से कौन सा उपयोग करना चाहिए?

यह आपके उपयोग के मामले पर निर्भर करता है। जब आप एक स्थिर तिथि और समय संग्रहीत करना चाहते हैं, तो DATETIME का उपयोग करें। जब तिथि/समय डेटा सर्वर टाइम ज़ोन से प्रभावित हो, जैसे रिकॉर्ड निर्माण या अपडेट समय, तो TIMESTAMP का उपयोग करें। चूँकि TIMESTAMP स्वचालित टाइम ज़ोन रूपांतरण करता है, यह तब उपयुक्त है जब आपका सिस्टम विभिन्न टाइम ज़ोन में काम करना आवश्यक हो।