2012-12-17 10 views
7

पर MySQL डेटाबेस टाइमज़ोन सेट करें मुझे एक डेटाबेस के टाइमज़ोन को बदलने की आवश्यकता है क्या यह संभव है?जीएमटी

मुझे पता है कि हम अपने डब्ल्यूएचएम के भीतर टाइमज़ोन बदल सकते हैं (हम होस्टगेटर से समर्पित सर्वर का उपयोग कर रहे हैं), हालांकि सर्वर पर चल रहे विरासत सॉफ्टवेयर की बड़ी संख्या में इसमें +6 घंटे कोडिंग हैं (यानी सर्वर टाइमज़ोन सीएसटी है, हम जीएमटी में समय चाहते थे इसलिए पिछले डेवलपर्स ने कोड के भीतर मैन्युअल रूप से तिथि/समय बदल दिया - बुरा!)।

अब मैं एक नए सॉफ्टवेयर पर काम कर रहा हूं और इसे जीएमटी में रखना चाहता हूं, मुझे पता है कि मैं date_default_timezone_set ('जीएमटी') का उपयोग कर सकता हूं हालांकि यह MySQL प्रविष्टियों को हल नहीं करेगा जहां डेटाटाइम कॉलम CURRENT_TIMESTAMP पर सेट है @ सीएसटी टाइमज़ोन डालेगा।

उत्तर

33

नहीं, एक MySQL उदाहरण के भीतर एक डेटाबेस के लिए टाइमज़ोन को बदलना संभव नहीं है।

आप सर्वर और ग्राहक time_zone सेटिंग प्राप्त कर सकते हैं:

SELECT @@global.time_zone, @@session.time_zone; 

तुम भी ग्राहक समय क्षेत्र, या पूरे MySQL उदाहरण के लिए समय क्षेत्र बदलने के कर सकते हैं।

लेकिन मौजूदा क्लाइंट कनेक्शन पर मौजूद निहितार्थ के बारे में उत्सुकता से सावधान रहें, और उदाहरण में DATETIME और TIMESTAMP मान पहले से संग्रहीत किए जाएंगे।

सर्वर TIME_ZONE MySQL उदाहरण स्टार्टअप पर सेट करने के लिए, /etc/my.cnf फ़ाइल को संशोधित (या जहाँ भी अपने mysql उदाहरण प्रारंभ मानकों से पढ़ा जाता है), [mysqld] खंड के अंतर्गत:

[mysqld] 
default-time-zone='+00:00' 

- या - MySQL सर्वर पर समय क्षेत्र सेटिंग बदलने मूल्यों STO परिवर्तन नहीं करता है: -

mysqld_safe को

नोट --default_time_zone='+00:00' विकल्प जोड़ने मौजूदा DATETIME या TIMESTAMP कॉलम में लाल, लेकिन चूंकि यह उस संदर्भ को प्रभावी रूप से परिवर्तित करता है जिसमें उन संग्रहीत मूल्यों का अर्थ होता है, ऐसा लगता है कि सभी मानों को स्थानांतरित किया गया है। (जहां 08:00 को 8AM सीएसटी का मतलब लिया गया था, सर्वर का टाइम_ज़ोन सीएसटी से जीएमटी में बदल गया था, वही '08: 00 'अब 8AM जीएमटी होगा, जो प्रभावी रूप से 2AM सीएसटी होगा।

यह भी ध्यान कि TIMESTAMP कॉलम हमेशा यूटीसी में जमा हो जाती में रखने के लिए, जबकि DATETIME स्तंभ एक समयक्षेत्र की जरूरत नहीं है http://dev.mysql.com/doc/refman/5.5/en/datetime.html

प्रत्येक ग्राहक सत्र के लिए अपने स्वयं के सत्र के लिए समय क्षेत्र सेटिंग बदल सकते हैं:।

SET time_zone='-06:00'; 

लेकिन इनमें से कोई भी नहीं वास्तव में टाइमज़ोन रूपांतरण समस्या "हल" है, यह सिर्फ रूपांतरण समस्या को हल करता है।

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

(आपके द्वारा वर्णित सेटअप के बारे में क्या अजीब बात यह है कि ऐप DATETIME मानों को संग्रहीत कर रहा है जैसे कि MySQL सर्वर time_zone जीएमटी पर सेट है, लेकिन MySQL सर्वर time_zone किसी और चीज़ पर सेट है।)

+0

स्पष्ट और संक्षिप्त उत्तर के लिए बहुत धन्यवाद - शर्म की बात यह संभव नहीं है - एक और सर्वर मुझे लगता है! – buzzmonkey

+4

एसईटी टाइमज़ोन = '- 06:00'; एसईटी टाइम_ज़ोन = '- 06:00' होना चाहिए; –

2

यदि आप अपना वर्तमान समय क्षेत्र नहीं बदल सकते हैं तो आप परिणाम बदल सकते हैं।

तारीख 2015-01-05 12:06:16

"का चयन तिथि + अंतराल 2 घंटे ExampleTable से 'तारीख'"

तारीख 2015-01-05 14:06:16

संबंधित मुद्दे