Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

सर्वर टाइमज़ोन यूटीसी नहीं होने पर जावा में MySQL से यूटीसी डेटाटाइम फ़ील्ड पुनर्प्राप्त कर रहा है

आपका क्लाइंट getDate() जहां तक ​​जाता है कोड सही दिखता है। मुझे लगता है कि तालिका में संग्रहीत तिथियों का इलाज करने के लिए आपको MySQL कनेक्टर/जे जेडीबीसी ड्राइवर प्राप्त करने की भी आवश्यकता है नकली समय क्षेत्र रूपांतरण से बचने के लिए UTC तिथियों के अनुसार। इसका अर्थ है JDBC getTimestamp के लिए उपयोग किए जाने वाले क्लाइंट सत्र समय क्षेत्र और कैलेंडर के अतिरिक्त, प्रभावी सर्वर समय क्षेत्र सेट करना जैसा आप कर रहे हैं कॉल करें।

अपने असफल अभिकथन में आपको मिले मूल्यों पर एक नज़र डालें, और त्रुटि किस दिशा में है:

expected:<Thu Apr 16 11:30:30 BST 2015> but was:<Thu Apr 16 10:30:30 BST 2015>

आपको जो मिला वह 10:30 BST था, जो कि 9:30 GMT है। यह डेटाबेस के साथ संगत है जो तालिका में 10:30 को बीएसटी मान के रूप में मानता है और जीएमटी तिथि के रूप में इसे पार्स करने से पहले इसे आपके लिए जीएमटी में परिवर्तित कर देता है। यह एक GMT मान की विपरीत दिशा है जिसे नकली रूप से BST में परिवर्तित किया जा रहा है।

यह एक JDBC-विशिष्ट मुद्दा हो सकता है, क्योंकि JDBC को उस समय के समय को स्थानीय क्षेत्र में परिवर्तित करने की आवश्यकता होती है। (जहां MySQL C API नहीं है, शायद इसलिए कि C के क्लासिक टाइम टाइप ज़ोन-अवेयर नहीं हैं जैसे कि Java है।) और इसे यह जानने की जरूरत है कि यह किस ज़ोन को से कन्वर्ट कर रहा है। , भी। MySQL टाइमस्टैम्प प्रकार हमेशा यूटीसी के रूप में संग्रहीत किया जाता है। लेकिन यह DATETIME के लिए नहीं बताया गया है प्रकार। मैं सोचता हूं इसका मतलब है कि MySQL DATETIME की व्याख्या करने जा रहा है कॉलम मान सर्वर के समय क्षेत्र में होने के नाते। जिसे आपने बीएसटी पर सेट होने के रूप में उल्लेख किया है, और यह आपके अभिकथन त्रुटि संदेश में दिखाए गए बदलाव की दिशा के अनुरूप है।

time_zone आपके द्वारा सेट किया गया सत्र चर MySQL सर्वर को बता रहा है कि आपके क्लाइंट मशीन का समय क्षेत्र क्या है, लेकिन यह प्रभावित नहीं करता है कि सर्वर अपने समय क्षेत्र को क्या सोचता है। इसे <से ओवरराइड किया जा सकता है कोड>सर्वरटाइमज़ोन JDBC कनेक्शन संपत्ति . अपने कनेक्शन पर, serverTimezone सेट करें UTC को, और सुनिश्चित करें कि LegacyDatetimeCode का उपयोग करें बंद है। (और यदि यह काम नहीं करता है तो अन्य ज़ोन-संबंधित गुणों को देखें।) देखें कि क्या आपकी तिथियां यूटीसी के रूप में डेटाबेस में समान कैलेंडर फ़ील्ड मानों के साथ आती हैं।

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL कार्यक्षेत्र में एक डेटाबेस आरेख बनाएँ

  2. रेल 3.2 + MySQL:त्रुटि:फ़ील्ड 'create_at' का कोई डिफ़ॉल्ट मान नहीं है:INSERT INTO

  3. किसी ने कभी भी सत्र चर के साथ पेपैल वेबसाइट भुगतान मानक का उपयोग किया है?

  4. MySQL से कैसे चुनें जहां टेबल का नाम वेरिएबल है

  5. उबंटू पर luaSQL स्थापित करें