खोज…


टिप्पणियों

जब आपको MySQL में दुनिया भर में उपयोगकर्ता आधार के लिए समय की जानकारी को संभालने की आवश्यकता होती है, तो अपनी तालिकाओं में TIMESTAMP डेटा प्रकार का उपयोग करें।

प्रत्येक उपयोगकर्ता के लिए, एक उपयोगकर्ता-वरीयता टाइमज़ोन स्तंभ संग्रहीत करें। VARCHAR (64) उस स्तंभ के लिए एक अच्छा डेटा प्रकार है। जब कोई उपयोगकर्ता आपके सिस्टम का उपयोग करने के लिए पंजीकरण करता है, तो समय क्षेत्र मूल्य के लिए पूछें। मेरा अटलांटिक समय है, America/Edmonton । आपका होना Asia/Kolkata या Australia/NSW नहीं हो सकता है। इस उपयोगकर्ता-वरीयता सेटिंग के लिए एक उपयोगकर्ता इंटरफ़ेस के लिए, WordPress.org सॉफ़्टवेयर का एक अच्छा उदाहरण है।

अंत में, जब भी आप किसी उपयोगकर्ता की ओर से अपने DBMS को अपने होस्ट प्रोग्राम (जावा, php, जो भी) से एक कनेक्शन स्थापित करते हैं, तो पोस्ट कमांड जारी करें

 SET SESSION time_zone='(whatever tz string the user gave you)'

इससे पहले कि आप किसी भी उपयोगकर्ता डेटा को शामिल करते समय संभाल लें। फिर आपके द्वारा इंस्टॉल किए गए सभी TIMESTAMP बार उपयोगकर्ता के स्थानीय समय में रेंडर करेंगे।

यह आपके टेबल पर जाने वाले सभी समय को यूटीसी में परिवर्तित करने का कारण बनेगा, और हर समय स्थानीय अनुवाद किया जाएगा। यह Now () और CURDATE () के लिए ठीक से काम करता है। फिर से, आपको इसके लिए TIMESTAMP और DATETIME या DATE डेटा प्रकारों का उपयोग करना होगा।

सुनिश्चित करें कि आपका सर्वर OS और डिफ़ॉल्ट MySQL समय क्षेत्र UTC पर सेट है। यदि आप अपने डेटाबेस में जानकारी लोड करने से पहले ऐसा नहीं करते हैं, तो इसे ठीक करना लगभग असंभव होगा। यदि आप MySQL को चलाने के लिए किसी विक्रेता का उपयोग करते हैं, तो आग्रह करें कि वे यह अधिकार प्राप्त करें।

किसी विशेष समय क्षेत्र में वर्तमान दिनांक और समय को पुनः प्राप्त करें।

यह भारत के मानक समय में और अब UTC में स्थानीय समय में NOW() का मूल्य प्राप्त करता है।

SELECT NOW();
SET time_zone='Asia/Kolkata'; 
SELECT NOW();
SET time_zone='UTC'; 
SELECT NOW();

किसी अन्य समय क्षेत्र में एक संग्रहीत `DATE` या` DATETIME` मान कनवर्ट करें।

यदि आपके पास एक संग्रहीत DATE या DATETIME (किसी स्तंभ में कहीं) तो इसे कुछ समय क्षेत्र के संबंध में संग्रहीत किया गया था, लेकिन MySQL में समय क्षेत्र मान के साथ संग्रहीत नहीं है । इसलिए, यदि आप इसे किसी अन्य समय क्षेत्र में बदलना चाहते हैं, तो आप कर सकते हैं, लेकिन आपको मूल समय क्षेत्र पता होना चाहिए। CONVERT_TZ() का उपयोग रूपांतरण करता है। यह उदाहरण कैलिफोर्निया में स्थानीय समय में बेची गई पंक्तियों को दर्शाता है।

SELECT CONVERT_TZ(date_sold,'UTC','America/Los_Angeles') date_sold_local
  FROM sales
 WHERE state_sold = 'CA'

किसी विशेष समय क्षेत्र में संग्रहीत `TIMESTAMP` मूल्यों को पुनः प्राप्त करें

यह वास्तव में आसान है। सभी TIMESTAMP मान सार्वभौमिक समय में संग्रहीत किए जाते हैं, और जब भी वे प्रस्तुत किए जाते हैं, हमेशा वर्तमान time_zone सेटिंग में परिवर्तित हो जाते हैं।

SET SESSION time_zone='America/Los_Angeles'; 
SELECT timestamp_sold
  FROM sales
 WHERE state_sold = 'CA'

ऐसा क्यों है? TIMESTAMP मान आदरणीय UNIX time_t डेटा प्रकार पर आधारित हैं। उन UNIX टाइमस्टैम्प को 1970-01-01 00:00:00 UTC के बाद से कुछ सेकंड के रूप में संग्रहीत किया जाता है।

सूचना TIMESTAMP मान सार्वभौमिक समय में संग्रहीत किए जाते हैं। DATE और DATETIME मान संग्रहीत किए जाने के समय जो भी स्थानीय समय प्रभाव में थे, उसमें संग्रहीत किए जाते हैं।

मेरे सर्वर की स्थानीय समय क्षेत्र सेटिंग क्या है?

प्रत्येक सर्वर में डिफ़ॉल्ट वैश्विक time_zone सेटिंग होती है, जिसे सर्वर मशीन के मालिक द्वारा कॉन्फ़िगर किया जाता है। आप इस तरह से वर्तमान समय क्षेत्र निर्धारित कर सकते हैं:

SELECT @@time_zone

दुर्भाग्य से, यह आमतौर पर मूल्य SYSTEM , जिसका अर्थ है कि MySQL समय सर्वर OS के समय क्षेत्र सेटिंग द्वारा नियंत्रित होता है।

प्रश्नों का यह क्रम (हाँ, यह एक हैक है ) आपको सर्वर के समय क्षेत्र सेटिंग और UTC के बीच मिनटों में ऑफ़सेट वापस देता है।

CREATE TEMPORARY TABLE times (dt DATETIME, ts TIMESTAMP);
SET time_zone = 'UTC';
INSERT INTO times VALUES(NOW(), NOW());
SET time_zone = 'SYSTEM';
SELECT dt, ts, TIMESTAMPDIFF(MINUTE, dt, ts)offset FROM times;
DROP TEMPORARY TABLE times;

यह कैसे काम करता है? विभिन्न डेटा प्रकारों के साथ अस्थायी तालिका में दो स्तंभों का सुराग है। DATETIME डेटा प्रकार हमेशा स्थानीय समय सारणी में संग्रहीत किए जाते हैं, और UTC में TIMESTAMP s। तो INSERT स्टेटमेंट, जब time_zone UTC पर सेट होता है, दो समान दिनांक / समय मान संग्रहीत करता है।

तब, SELECT कथन, तब किया जाता है जब time_zone स्थानीय समय पर सर्वर पर सेट हो जाता है। TIMESTAMP s को हमेशा उनके संग्रहीत UTC फॉर्म से स्थानीय समय में SELECT स्टेटमेंट में अनुवादित किया जाता है। DATETIME s नहीं हैं। तो TIMESTAMPDIFF(MINUTE...) ऑपरेशन स्थानीय और सार्वभौमिक समय के बीच अंतर की गणना करता है।

मेरे सर्वर में किस time_zone मान उपलब्ध हैं?

अपने MySQL सर्वर उदाहरण में संभावित time_zone मूल्यों की सूची प्राप्त करने के लिए, इस कमांड का उपयोग करें।

 SELECT mysql.time_zone_name.name

आमतौर पर, यह इंटरनेट निर्दिष्ट संख्या प्राधिकरण में पॉल एगर्ट द्वारा बनाए गए समय क्षेत्रों की ज़ोनइन्फो सूची दिखाता है। दुनिया भर में लगभग 600 समय क्षेत्र हैं।

यूनिक्स-जैसे ऑपरेटिंग सिस्टम (लिनक्स वितरण, बीएसडी वितरण और आधुनिक मैक ओएस वितरण, उदाहरण के लिए) नियमित अपडेट प्राप्त करते हैं। एक ऑपरेटिंग सिस्टम पर इन अपडेट्स को स्थापित करने से MySQL इंस्टेंस वहां चल रहा है जो समय क्षेत्र और दिन के उजाले / मानक समय में बदलाव को ट्रैक करता है।

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



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow