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

SQL के साथ समयक्षेत्र समाधान

1/3

go IANA के समय क्षेत्र डेटाबेस का उपयोग करता है सटीक ज़ोन नामों के साथ। रिवर्स इंजीनियर की कोशिश कर रहा है कि कैसे MySQL एक (लिनक्स) होस्ट से स्थानीय टाइमज़ोन प्रारूप को निर्धारित करता है और उस तर्क को go में डुप्लिकेट करता है क्लाइंट - जैसा कि @MattJohnson ने बताया - अविश्वसनीय साबित होता है।

2/3

database/sql.DB - Open(drv, DSN) . के माध्यम से बनाया गया - वही DSN का उपयोग करेगा सभी कनेक्शनों के लिए। जबकि एक sql.DB एक बार बनाने और कई बार उपयोग करने के लिए है - DSN . को बदलने का कोई तरीका नहीं है इस तथ्य के बाद - तो किसी को एक नया sql.DB बनाने की आवश्यकता होगी DSN . बदलते समय ।

3/3

तो बेहतर तरीका है, MySQL का लाभ उठाना प्रतीत होता है सभी datetime को कन्वर्ट करने के लिए क्लाइंट को ट्रांसमिशन से पहले स्थानीय से यूटीसी टाइमज़ोन में मान। यह DSN के माध्यम से कनेक्शन समय पर डेटाबेस के (संभवतः अज्ञात) टाइमज़ोन को सेट करने की जटिलता को दूर करता है ।

एक आशाजनक विकल्प, कनेक्शन का सत्र समय क्षेत्र निर्धारित करना है:

  • SET @@session.time_zone = "+00:00";
  • हालांकि, यह केवल वर्तमान . के लिए काम करता है कनेक्शन (कनेक्शन पूल के भीतर)। एक go हालांकि क्लाइंट को यह नहीं पता होगा कि वे किसी भी समय किस मुफ्त कनेक्शन का उपयोग कर रहे हैं।
  • इसलिए यह सुनिश्चित करने के लिए कि यह हमेशा काम करता है, किसी को सभी प्रश्नों से पहले इसे मैन्युअल रूप से लागू करने की आवश्यकता होगी . भले ही केवल एक DB कनेक्शन उपयोग में हो - यदि कनेक्शन विफल हो जाता है और कनेक्शन पुनः प्रयास शुरू हो जाता है - तो कोई भी पिछले सत्र की स्थिति खो जाएगी।

तो इसके बजाय, सभी datatime . को लपेटकर इस तरह के रूपांतरण फ़ंक्शन वाले कॉलम:

CONVERT_TZ(`STAMP_UPDATED`,@@session.time_zone,'+00:00')

सुनिश्चित करता है कि समय क्षेत्र की गणना क्वेरी समय पर की जाती है और कनेक्शन पुन:कनेक्शन आदि के दौरान खो नहीं जाएगी।

तो अब DSN अब loc specify निर्दिष्ट करने की आवश्यकता नहीं है - UTC . के रूप में डिफ़ॉल्ट है। वास्तव में DSN केवल ?parseTime=true . के प्रत्यय विकल्प की आवश्यकता है datetime . को अनुमति देने के लिए go . में अनुवाद करने के लिए का मूल time.Time

अंत में और सबसे महत्वपूर्ण बात यह है कि यह किसी भी समय क्षेत्र पर सेट किसी भी सर्वर के साथ काम करेगा।

इस पर एच/टी उत्तर




  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. मैक स्थापित करें और टर्मिनल का उपयोग करके mysql खोलें

  3. रेल ActiveRecord एक आईडी कॉलम को संभालता है जो प्राथमिक कुंजी नहीं है

  4. पीडीओ:ड्राइवर php/mysql नहीं मिल सका

  5. सीमांकित फ़ाइल से mysql तालिका में डेटा लोड करते समय त्रुटि रेखाएँ छोड़ें