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

जावा MySQL टाइमस्टैम्प समय क्षेत्र की समस्याएं

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

ध्यान दें कि यह JVM के समय क्षेत्र का उपयोग करके टाइमस्टैम्प को प्रारूपित करता है। यह तभी काम करेगा जब आपका JVM UTC टाइम ज़ोन का उपयोग कर रहा हो। कैलेंडर ऑब्जेक्ट को पूरी तरह से अनदेखा कर दिया गया है।

this.tsdf = new SimpleDateFormat("''yyyy-MM-dd HH:mm:ss''", Locale.US);
timestampString = this.tsdf.format(x);

MySQL के लिए कैलेंडर तर्क का उपयोग करने के लिए, आपको निम्न कनेक्शन विकल्प के साथ विरासत दिनांक/समय कोड को अक्षम करना होगा:

useLegacyDatetimeCode=false

तो आप इस तरह डेटाबेस से कनेक्ट करते समय इसका इस्तेमाल कर सकते हैं:

String url = "jdbc:mysql://localhost/tz?useLegacyDatetimeCode=false"

यदि आप उपरोक्त लाइन का उपयोग करके लीगेसी डेटाटाइम कोड को अक्षम करते हैं, तो यह आपके टाइमस्टैम्प को लक्षित कैलेंडर के समय क्षेत्र में प्रस्तुत करेगा:

if (targetCalendar != null) {
    targetCalendar.setTime(x);
    this.tsdf.setTimeZone(targetCalendar.getTimeZone());

     timestampString = this.tsdf.format(x);
} else {
    this.tsdf.setTimeZone(this.connection.getServerTimezoneTZ());
    timestampString = this.tsdf.format(x);
}

यहाँ क्या हो रहा है यह देखना बहुत आसान है। यदि आप कैलेंडर ऑब्जेक्ट में पास करते हैं, तो यह डेटा को स्वरूपित करते समय इसका उपयोग करेगा। अन्यथा, यह डेटा को प्रारूपित करने के लिए डेटाबेस के समय क्षेत्र का उपयोग करेगा। आश्चर्यजनक रूप से, यदि आप किसी कैलेंडर में पास होते हैं, तो यह समय को दिए गए टाइमस्टैम्प मान (जो व्यर्थ प्रतीत होता है) पर भी सेट कर देगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CURRENT_DATE/CURDATE() डिफ़ॉल्ट DATE मान के रूप में काम नहीं कर रहा है

  2. MySQL - सबसे कम और सबसे बड़ा तुलना ऑपरेटर

  3. SQL CREATE DATABASE Syntax – DBMS द्वारा सूचीबद्ध

  4. अक्षांश देशांतर पर आधारित त्रिज्या खोज करने के लिए SQL क्वेरी

  5. पासवर्ड रीसेट करने के बाद उपयोगकर्ता 'रूट' @ 'लोकलहोस्ट' (पासवर्ड का उपयोग करके:हाँ) के लिए प्रवेश निषेध LINUX