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

Jooq LocalDateTime फ़ील्ड सत्र टाइमज़ोन के बजाय सिस्टम टाइमज़ोन का उपयोग करती है

मैंने हाल ही में पाया है कि उपयोग किए जा रहे डेटाबेस ड्राइवर के आधार पर, jOOQ डेटटाइम पार्सिंग में कुछ अजीब व्यवहार प्रदर्शित कर सकता है। jOOQ ऑफ़सेट दिनांक समय को Z (UTC) के रूप में लौटाता है, भले ही वह न हो

विशेष रूप से, मेरे मामले में, एक अलग पोस्टग्रेज ड्राइवर का उपयोग करने के परिणामस्वरूप DefaultBinding.java एक कैलेंडर ऑब्जेक्ट प्राप्त कर रहा है जिसमें टाइमस्टैम्प है, लेकिन पार्स करने के लिए उस पर toString को कॉल करना। पता चला, toString टाइमज़ोन को प्रिंट नहीं करता है, फिर jOOQ ने अनुमान लगाया कि यह स्थानीय समय में था।

मेरे लिए, DefaultBinding.java (मैं टाइमज़ोन के साथ टाइमस्टैम्प का उपयोग कर रहा था) में आपत्तिजनक लाइनें थीं:

else if (type == OffsetDateTime.class) {
    result = (T) offsetDateTime(ctx.resultSet().getString(ctx.index()));
}

आप समय क्षेत्र न होने के आधार पर अन्य ifs की उस श्रृंखला में एक अलग लाइन पर हो सकते हैं।

अपने परीक्षण में, मैंने यह भी पाया कि सिस्टम समय बदलने से परिणाम बदल गया, लेकिन सत्र का समय बदलने से कुछ नहीं हुआ।

सौभाग्य से मेरे लिए, मानक पोस्टग्रेज ड्राइवर के लिए एक स्विच ने समस्या का समाधान किया। यदि ऐसा नहीं होता है, तो मैं toString के उपयोग को ठीक करने के लिए ऑफसेटडेटटाइम के लिए बाध्यकारी को ओवरलोड करने जा रहा था और यह प्रासंगिक समय क्षेत्र की स्ट्रिपिंग से जुड़ा हुआ है। दुर्भाग्य से, आपको उस पथ का अनुसरण करने की आवश्यकता हो सकती है, जब तक कि आप भी एक SQL ड्राइवर का उपयोग नहीं कर रहे हैं जिसे अपग्रेड या प्रतिस्थापित किया जा सकता है। या, आप इसे टाइमज़ोन के साथ स्टोर कर सकते हैं और जब आप डेटाबेस से लोड करते हैं तो वांछित टाइमज़ोन में कनवर्ट कर सकते हैं।




  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. क्या मैं GUI टूल्स के साथ MySQL से SSH कर सकता हूँ?

  3. लिनक्स में MySQL डेटाबेस साइज कैसे चेक करें

  4. यह वामपंथी क्यों केवल एक रिकॉर्ड लौटाता है?

  5. मूल्यों को जोड़कर समूह करें