MySQL JDBC चालक 5.1.33 - समय क्षेत्र समस्या


359

कुछ पृष्ठभूमि:

मेरे पास एक जावा 1.6 वेब टॉमटैट 7 पर चल रहा है। डेटाबेस MySQL 5.5 है। इससे पहले, मैं DB को कनेक्ट करने के लिए मैसकल JDBC ड्राइवर 5.1.23 का उपयोग कर रहा था। सब कुछ काम कर गया। मैंने हाल ही में मैसकल JDBC ड्राइवर 5.1.33 में अपग्रेड किया है। अपग्रेड के बाद, ऐप शुरू करते समय टॉमकैट इस त्रुटि को फेंक देगा।

WARNING: Unexpected exception resolving reference
java.sql.SQLException: The server timezone value 'UTC' is unrecognized or represents more than one timezone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc timezone value if you want to utilize timezone support.

ये क्यों हो रहा है?


1
आपका JDBC URL कैसा दिखता है?
डेविड लेवेस्क

मेरा उत्तर चेक stackoverflow.com/a/44720416/4592448 । मुझे लगता है कि इसका सबसे अच्छा जवाब)
फोरट्रान

जवाबों:


673

जाहिर है, UTC समय क्षेत्र के साथ काम करने के लिए MySQL JDBC ड्राइवर का संस्करण 5.1.33 प्राप्त करने के लिए, किसी को serverTimezoneकनेक्शन स्ट्रिंग में स्पष्ट रूप से निर्दिष्ट करना होगा ।

jdbc:mysql://localhost/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

4
डॉक्स के अनुसार useJDBCCompliantTimezoneShift का उपयोग करते समय कोई प्रभाव नहीं पड़ता है। इसलिए इसकी जरूरत नहीं है ...
matof

24
यह मेरी त्रुटि को हल करता है। अतिरिक्त नोट, & amp के साथ & से बच जाएं; in persistence.xml फ़ाइल: <संपत्ति का नाम = "javax.persistence.jdbc.url" मान = "jdbc: mysql: // localhost / test? useUnicode = true & amp; उपयोग करेंJDBCCompliantTimezoneShift = true & amp; useLegacyDatetimeCodeCode.cnode/Chindi.it
pdem

5
यह सही नहीं है। उपयोग की बात है LegacyDatetimeCode = false सर्वर टाइमज़ोन निर्दिष्ट करने के लिए नहीं है, इसलिए क्लाइंट टाइमज़ोन भिन्नता को ठीक करता है। यह MySQL क्लाइंट के संस्करण में एक बग है।
antgar9

2
यह समाधान GMT को छोड़कर समय क्षेत्र को बर्बाद कर देता है। मुझे लगता है कि सही समाधान एक नीचे है
डंकनस्कुंगकिम

1
समाधान 8.0.17 के साथ काम करता है। एक नए MySQL स्थापना के साथ हुआ। विश्वास नहीं कर सकता कि यह बग इतने सालों के बाद तय नहीं हुआ है।
तिलमन होउशर

101

मैंने MySQL को कॉन्फ़िगर करके इस समस्या को हल किया है।

SET GLOBAL time_zone = '+3:00';


6
यदि आप MSK टाइमज़ोन का उपयोग कर रहे हैं तो यह +3 है, तो आप डीबी एड्रेस के रूप में फ़ोलोइंग का उपयोग कर सकते हैं jdbc:mysql://localhost/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Europe/Moscow:। ऐसा लगता है कि mysql-कनेक्टर कम समय-क्षेत्र नामों को नहीं समझता है।
बच्चा

2
डेलाइट सेविंग टाइम घड़ी बदलने पर आप क्या करते हैं?
isapir

3
Mysql 8.0 के साथ आप "persist time_zone = '+00: 00' सेट कर सकते हैं;" my.cnf को संपादित करने या सर्वर को पुनरारंभ करने की आवश्यकता के बिना, इसे लगातार यूटीसी पर सेट करने के लिए। देखें mysqlserverteam.com/...
ccleve

यदि आप इसे एक अद्वितीय मैनुअल SQL क्वेरी के माध्यम से सेट कर रहे हैं, तो यह सेटिंग डीबी पुनरारंभ के बाद मूल मान को वापस कर देगी।
CBA110

काम करता है - अपने स्थानीय समयक्षेत्र स्ट्रिंग +3 सेट GLOBAL time_zone = '+3: 00' के स्थान पर संशोधित करना याद रखें;
प्रवीण

61

इस विषय पर कई पोस्ट पढ़ने के बाद, अलग-अलग कॉन्फ़िगरेशन का परीक्षण करना और इस mysql बग थ्रेड से कुछ अंतर्दृष्टि के आधार पर यह है कि मैंने क्या लिखा है:

  • सर्वर समय क्षेत्र विशेष रूप से डेटाबेस में संग्रहीत तिथियों को एप्लिकेशन सर्वर के समय क्षेत्र में परिवर्तित करने के लिए महत्वपूर्ण है। अन्य निहितार्थ हैं लेकिन यह सबसे अधिक ध्यान देने योग्य है
  • GMT x UTC टाइम ज़ोन सिस्टम। GMT की कल्पना 19 वीं शताब्दी के अंत में की गई थी और इसे मानक समय और गर्मियों के समय के बीच स्थानांतरित किया जा सकता है। यह संपत्ति एक ऐसी स्थिति का कारण बन सकती है जहां डेटाबेस सर्वर गर्मियों के समय में बदल जाता है और आवेदन इसे नोटिस नहीं करता है (शायद अन्य जटिलताएं हैं लेकिन मैंने आगे शोध नहीं किया है)। UTC समय के साथ नहीं बदलता (यह 0 ° देशांतर पर औसत सौर समय के लगभग 1 सेकंड के भीतर होता है)।
  • ServerTimeZone परिभाषा को mysql jdbc कनेक्टर्स संस्करणों 5.1 आगे में पेश किया गया था। संस्करण 8 तक इसे नजरअंदाज किया जा सकता है useLegacyDatetimeCode=true, जो कि संयोजन के साथ useJDBCCompliantTimezoneShift=trueआवेदन को हर कनेक्शन पर डेटाबेस समय क्षेत्र प्राप्त करेगा। इस मोड में जीएमटी टाइम जोन जैसे 'ब्रिटिश समर टाइम' को आंतरिक जावा / जेडडीबीसी प्रारूप में परिवर्तित किया जाएगा। नए समय क्षेत्रों को एक .properties फ़ाइल में परिभाषित किया जा सकता है जैसे कि यह
  • Jdbc ड्राइवर वर्जन 8 से शुरू होकर, ऑटोमैटिक टाइम मैचिंग ( useJDBCCompliantTimezoneShift) और लीगेसी टाइम फॉर्मेट ( useLegacyDatetimeCode) हटा दिए गए ( देखें mysql jdbc कनेक्टर चैंज )। इसलिए इन 2 मापदंडों को सेट करने का कोई प्रभाव नहीं पड़ता है क्योंकि इन्हें पूरी तरह से अनदेखा किया जाता है (नया डिफ़ॉल्ट है useLegacyDateTimeCode=false)
  • इस तरह की स्थापना में serverTimezoneहो गया अनिवार्य अगर समय क्षेत्रों (आवेदन / डाटाबेस सर्वर) के किसी भी स्वरूप में नहीं हैं 'UTC + xx' या 'GMT + xx'
  • यूटीसी के रूप में सर्वर समय निर्धारित करने का कोई प्रभाव नहीं है (उदाहरण के लिए jdbc:mysql://localhost:3306/myschema?serverTimezone=UTC, भले ही आपका एप्लिकेशन / डेटाबेस सर्वर इस टाइमज़ोन में नहीं हैं। महत्वपूर्ण यह है कि एप्लिकेशन कनेक्शन स्ट्रिंग + डेटाबेस एक ही समय क्षेत्र के साथ सिंक्रनाइज़ होने के लिए है। अलग-अलग शब्दों में। , डेटाबेस सर्वर पर एक अलग समय क्षेत्र के साथ serverTimezone = UTC की स्थापना बस डेटाबेस से निकाले गए किसी भी दिनांक को स्थानांतरित कर देगा
  • MySQL डिफॉल्ट टाइम ज़ोन को my.ini या my.cnf फाइल्स (विंडोज़ / लाइनक्स क्रमशः) के साथ यूटीसी + 0 पर सेट किया जा सकता है, लाइन को जोड़कर default-time-zone='+00:00'( इस StackOverflow पोस्ट में विवरण )
  • AWS (अमेज़ॅन वेब सेवाओं) पर कॉन्फ़िगर किए गए डेटाबेस को स्वचालित रूप से UTC + 0 डिफ़ॉल्ट समय सौंपा गया है ( AWS सहायता पृष्ठ यहां देखें )

1
अच्छा जवाब, धन्यवाद। विभिन्न गोलियां सभी उपयोगी हैं। मैं default-time-zone = '+00:00'होमब्रे /usr/local/etc/my.cnfफ़ाइल में डालने के सुझाव के साथ गया था । ऐसा लगता है कि आसपास के स्थान =महत्वपूर्ण हैं, हालांकि आप उन्हें शामिल करने के लिए उस बुलेट को संपादित कर सकते हैं।
मार्क एडिंगटन

51

यदि आप मावेन का उपयोग कर रहे हैं, तो आप बस एक और MySQL कनेक्टर संस्करण सेट कर सकते हैं (मेरे पास एक ही त्रुटि थी, इसलिए मैं 6.0.2 से 5.1.39 में बदल गया) pom.xml:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.39</version>
</dependency>

जैसा कि एक अन्य उत्तर में बताया गया है, यह समस्या 6.0.3 या इसके बाद के संस्करण में तय की गई है, इसलिए आप अपडेट किए गए संस्करण का उपयोग कर सकते हैं:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.3</version>
</dependency>

pom.xmlफ़ाइल सहेजने के बाद मावेन स्वचालित रूप से आपकी परियोजना का निर्माण करेगा ।


2
जिन लोगों ने mysql-कनेक्टर-java / 6 -> डाउनलोड किया है, उनके लिए बस mysql-कनेक्टर-java / 5.1.20 डाउनलोड करें और यह काम करना चाहिए। धन्यवाद!
मिलाएं

6
डाउनग्रेडिंग से बचना चाहिए। इसके अलावा, यह 6.0.6अभी भी तय नहीं है । उपरोक्त समाधान का उपयोग करने के लिए बेहतर है
phil294

मुझे नवीनतम जार [mysql-कनेक्टर-जावा-6.0.5.jar: 6.0.5] के साथ भी वही त्रुटि मिल रही है
user2478236

18
मेरे पास यह 8.0.12 में भी है
रॉबर्ट नीस्ट्रोज

13
8.0.13 वही त्रुटि देता है। 5.1.47 मेरे लिए काम करता है।
लोकलहोस्ट

36

कनेक्शन स्ट्रिंग को इस तरह सेट किया जाना चाहिए:

jdbc:mysql://localhost/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

आप एक में कनेक्शन को परिभाषित कर रहे हैं xmlफ़ाइल (जैसे persistence.xml, standalone-full.xml, आदि ..) के बजाय &का उपयोग करना चाहिए &amp;या एक का उपयोग CDATAब्लॉक।


1
यह सही नहीं है। उपयोग की बात है LegacyDatetimeCode = false सर्वर टाइमज़ोन निर्दिष्ट करने के लिए नहीं है, इसलिए क्लाइंट टाइमज़ोन भिन्नता को ठीक करता है।
antgar9

इसने मेरे लिए MySQL 5.7 को phpStorm 2019.1.4 से जोड़ने का काम किया।
मूली86

29

यह संस्करण 5.1.33 से 5.1.37 तक mysql-कनेक्टर-जावा में एक बग है। मैंने इसे यहाँ रिपोर्ट किया है: http://bugs.mysql.com/bug.php?id=79343

संपादित: यह mysql-कनेक्टर-जावा 5.1.39 से सही किया गया है

यह लोडटाइमजोन मैपिंग पद्धति में टाइम यूटील वर्ग में एक टाइपो था जो एनपीई पता लगाने /com/mysql/jdbc/TimeZoneMapping.properties फ़ाइल उठाता है। यदि आप कोड को देखते हैं, तो फ़ाइल टाइम क्लास क्लास लोडर के भीतर स्थित होनी चाहिए, न कि टाइमज़ोन:

TimeUtil.class.getResourceAsStream(TIME_ZONE_MAPPINGS_RESOURCE);

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

  • यदि यह एक स्टैंडअलोन एप्लिकेशन है, तो आप बस अपने कोड में एक सही कॉम / mysql / jdbc / TimeUtil क्लास जोड़ने की कोशिश कर सकते हैं और जार लोडिंग ऑर्डर से सावधान रहें। यह मदद कर सकता है: https://owenou.com/2010/07/20/patching-with-class-shadowing-and-mathen.html

  • यदि यह एक वेब एप्लिकेशन है, तो आसान उपाय यह है कि आप अपना खुद का mysql-कनेक्टर-जावा-5.1.37-पैचेड.जर बनाएँ, .class को सीधे मूल जार में प्रतिस्थापित करें।


स्वीट, इस रिपोर्ट के लिए धन्यवाद। खुशी है कि किसी ने बग को पिन करने में सक्षम किया है। क्या आप जानते हैं कि फ़िक्सेस कब रिलीज़ होगी?
bluecollarcoder

जो समाधान आप सुझा रहे हैं वह बहुत अच्छा है, लेकिन मुझे लगता है कि ड्राइवर स्रोत को संशोधित करना और मावेन निर्भरता को प्रबंधित करना शायद ज्यादातर लोगों के लिए बहुत कष्टप्रद है।
bluecollarcoder

4
@ गिल्ली यह रिलीज के रूप में तय नहीं है 6.0.6
Imme22009

6
यह बग 8.0.11 में मौजूद है
जॉन लिटिल

3
@JohnLittle मुझे यह समस्या 8.0.15 में भी मिली है, लेकिन यह बग के कारण नहीं है। Timezones सही तरीके से लोड किए गए हैं, लेकिन CET और CEST (ये टाइमज़ोन मेरे लिए परेशानी का कारण हैं) न तो न तो इसमें शामिल हैं और न TimeZone.getAvailableIDs()ही TimeZoneMapping.propertiesइस समाधान में यहां मदद मिलेगी। इसका समाधान serverTimezone=Europe/Berlin
प्रोबाई की

29

मैंने URL में नीचे दिए गए कनेक्शन स्ट्रिंग को हल किया

jdbc:mysql://localhost:3306/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

1
यह सही नहीं है। उपयोग की बात है LegacyDatetimeCode = false सर्वर टाइमज़ोन निर्दिष्ट करने के लिए नहीं है, इसलिए क्लाइंट टाइमज़ोन भिन्नता को ठीक करता है।
antgar9

25

इसने मेरे लिए सिर्फ serverTimeZone = UTC को application.properties पर जोड़कर काम किया।
spring.datasource.url=jdbc:mysql://localhost/db?serverTimezone=UTC


22
  1. मैंने अनुभाग में mysql config फाइल में जोड़ा [mysqld]

    default_time_zone='+03:00'
  2. और mysql सर्वर को पुनरारंभ करें:

    sudo service mysql restart

जहां +03 : 00 मेरा यूटीसी टाइम ज़ोन।

मेरे ओएस ubuntu 16.04 पर फ़ाइल को कॉन्फ़िगर करने का पथ:

/etc/mysql/mysql.conf.d/mysqld.cnf

चेतावनी: यदि आपका समय ज़ोन सममर और विजेता समय है। यदि आप समय बदलना चाहते हैं, तो आपको UTC को बदलना होगा। वर्ष में (उपयोग) या सूद के साथ सेट करें।

मेरा url jdbc कनेक्शन:

"jdbc:mysql://localhost/java"

1
पुनरारंभ करना मैसकल मूल रूप से लगभग सभी उत्पादन उपयोग के मामलों में एक नॉनस्टार्टर है। जब प्रतिकृति शामिल होती है तो यह एक समस्या और भी अधिक हो जाती है।
bluecollarcoder

@bluecollarcoder को केवल [mysqld] अनुभाग में जोड़ने की आवश्यकता है। या [mysqld] अनुभाग जोड़ें अगर यह अनुभाग नहीं है। उदाहरण मेरे config pastebin.com/j4F7t2KS
फोरट्रान

1
मैंने अपने लिनक्स सर्वर के / etc / स्थानीय समय को / usr / शेयर / जोनिन / यूएस / पैसिफिक से / usr / शेयर / जोनिनफो / अमेरिका / Los_Angeles में अपडेट किया और फिर mysql सेवा को फिर से शुरू किया और मेरे लिए यह मुद्दा तय किया।
विन्नीजाम्स

प्रदान किए गए सिंटैक्स के लिए मेरे मामले में, पुनरारंभ करते समय एक त्रुटि थी, और सही सिंटैक्स था: default-time-zone='+03:00'इसके बजाय, इस उत्तर के अनुसार । इसके अलावा DBeaver से आ रहा है।
wscourge

यह उचित नहीं है अगर आपको अपनी कंपनी के हर डेवलपर्स को अपने MySQL
कॉन्फिगर

16

मेरे पास एक ही समस्या है और मैंने इसे हल कर दिया है केवल "? सर्वर टाइमज़ोन = यूटीसी" मेरे स्ट्रिंग कनेक्शन के लिए।

#

मेरी समस्या

java.sql.SQLException: सर्वर टाइम ज़ोन मान 'CEST' अपरिचित है या एक से अधिक समय ज़ोन का प्रतिनिधित्व करता है। यदि आप समय क्षेत्र समर्थन का उपयोग करना चाहते हैं, तो आपको अधिक निर्दिष्ट समय क्षेत्र मान का उपयोग करने के लिए सर्वर या JDBC ड्राइवर (सर्वरटाइमज़ोन कॉन्फ़िगरेशन संपत्ति के माध्यम से) को कॉन्फ़िगर करना होगा।

my dbDriver = com.mysql.jdbc.Driver

my jar = mysql-connector-java-8.0.12.jar

my java = 1.8

my tomcat = Apache Tomcat Version 8.5.32

my MySql server = MySql ver.8.0.12 

14

उपरोक्त कार्यक्रम उस समय क्षेत्र त्रुटि उत्पन्न करेगा।

आपके डेटाबेस के नाम के बाद आपको इसे जोड़ना होगा ?useTimezone=true&serverTimezone=UTC:। एक बार जब आप कर लेंगे तो आपका कोड ठीक काम करेगा।

शुभकामनाएँ :)


14

मैंने अपने डेटाबेस पक्ष पर अमल किया।

mysql> SET @@global.time_zone = '+00:00';

mysql> SET @@session.time_zone = '+00:00';

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

मैं सर्वर संस्करण का उपयोग कर रहा हूं: 8.0.17 - MySQL सामुदायिक सर्वर - जीपीएल

स्रोत: https://community.oracle.com/thread/4144569?start=0&tstart=0


यू ने मेरा टाइम दोस्त बचा लिया। धन्यवाद यू।
कुमार

13

सब कुछ है कि हम के साथ समस्या को ठीक करने की जरूरत है serverTimezone:

String url = "jdbc:mysql://localhost:3306/db?serverTimezone=" + TimeZone.getDefault().getID()

यह मेरे साथ नवीनतम 5.4.15 संस्करण के साथ भी हुआ। लेकिन इसके साथ तय किया गया है: "? ServerTimezone =" + TimeZone.getDefault ()। GetID () "उर डेटाबेस के ठीक बगल में, मुद्दों को हल करता है।
Tes

10

आप मावेन निर्भरता में MySQL कनेक्टर का उपयोग कर सकते हैं,

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.14</version>
</dependency>

फिर आपको application.propertiesफ़ाइल में सही पैरामीटर सेट करने की आवश्यकता है ,

spring.datasource.url=jdbc:mysql://localhost:3306/UserReward?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=testuser
spring.datasource.password=testpassword
# MySQL driver
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

9

मैं mysql-कनेक्टर-जावा-8.0.13 का उपयोग कर रहा हूं और यही समस्या थी। मैंने कमांड लाइन कंसोल में अपना डेटाबेस बनाया और कमांड लाइन पर @Dimitry Rud के समाधान का उपयोग करके इस समस्या को हल किया:

SET GLOBAL time_zone = '-6:00';

मुझे कुछ भी पुनरारंभ करने की आवश्यकता नहीं थी, समय निर्धारित किया और तुरंत मेरे कोड को ग्रहण में चला दिया, यह बिना किसी समस्या के जुड़ा हुआ था।

बग को पुराने संस्करण में ठीक किया जाना चाहिए, लेकिन मुझे लगता है कि मुझे यह त्रुटि मिली क्योंकि कंसोल में डेटाबेस बनाने के बाद, मैंने इसे सेट किया था। मैं कंसोल के बजाय इसे प्रबंधित करने के लिए कार्यक्षेत्र और न ही किसी अन्य ऐप का उपयोग कर रहा हूं।


6

Mysql कार्यक्षेत्र से निम्नलिखित एसक्यूएल स्टेटमेंट चलाएं:

  1. SET @@ global.time_zone = '+00: 00';
  2. SET @@ session.time_zone = '+00: 00';

निम्न sql कथनों के साथ जाँच करें कि क्या मान निर्धारित किए गए थे:

@@ global.time_zone, @@ session.time_zone का चयन करें;


2
यह मेरे लिए तब काम आया जब IntelliJ IDEA से संबंध बनाने का प्रयास करते समय प्रश्न में त्रुटि आई।
फहीम हसन ज़ुंजानी

6

इसने मेरे लिए काम किया।

DBeaver 6.0 पर: कनेक्शन सेटिंग्स> ड्राइवर गुण> सर्वर समय क्षेत्र> सेट UTC पर जाएं।

इसके अलावा, वसंत बूट विन्यास में, संपत्ति के नीचे सेट करना पड़ा।

JDBC: mysql: // स्थानीय होस्ट: / serverTimezone = यूटीसी


5

जाहिर है, UTC समय क्षेत्र के साथ काम करने के लिए MySQL JDBC ड्राइवर का संस्करण 5.1.33 प्राप्त करने के लिए, कनेक्शन स्ट्रिंग में स्पष्ट रूप से सर्वरटाइमज़ोन निर्दिष्ट करना होगा।

spring.datasource.url = jdbc:mysql://localhost:3306/quartz_demo?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

3

मुझे लिबर ऑफिस बेस में भी यही समस्या थी। इसलिए मैंने कनेक्शन स्ट्रिंग में केवल एक गैर 'डेलाइट सेविंग टाइम ज़ोन' निर्दिष्ट किया है।
** यहाँ छवि विवरण दर्ज करें **

मैंने "& serverTimezone = MST" के बिना प्रयास किया लेकिन वह भी विफल रहा।

मैंने "और serverTimezone = MDT" की भी कोशिश की और यह विफल रहा, इसलिए किसी कारण से, यह दिन के उजाले की बचत समय को पसंद नहीं करता है!


3

मुझे वही समस्या थी जब मैं खिड़कियों पर स्प्रिंग बूट प्रोजेक्ट के साथ काम करने की कोशिश करता हूं।

डेटासोर्स url होना चाहिए:

spring.datasource.url=jdbc:mysql://localhost/database?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC


3

त्रुटि को हल करने के लिए mysql DB के नीचे क्वेरी चलाएँ

MariaDB [xxx> SET @@global.time_zone = '+00:00';
Query OK, 0 rows affected (0.062 sec)

MariaDB [xxx]> SET @@session.time_zone = '+00:00';
Query OK, 0 rows affected (0.000 sec)

MariaDB [xxx]> SELECT @@global.time_zone, @@session.time_zone;

3

मुझे आपके समान त्रुटि मिली लेकिन मेरा सर्वर समय क्षेत्र मान 'Afr' है। सेंट्रेल ऑएस्ट 'तो मैंने ये कदम उठाए:

MyError (IntelliJ IDEA सामुदायिक संस्करण पर):

    InvalidConnectionAttributeException: The server time zone value 'Afr. centrale Ouest' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to u....

जब मैंने अपने mysql सर्वर को SQL Server 8.0 (MYSQL80) में अपग्रेड किया तो मुझे इस समस्या का सामना करना पड़ा।

इस समस्या का सबसे सरल समाधान बस नीचे दिए गए आदेश को अपने MYSQL कार्यक्षेत्र में लिखें -

  SET GLOBAL time_zone = '+1:00'

समय-क्षेत्र के बाद का मान GMT +/ के बराबर होगा। आपके समय-क्षेत्र में अंतर। उपरोक्त उदाहरण उत्तरी अफ्रीका (GMT + 1: 00) / या भारत (GMT + 5: 30) के लिए है। यह मुद्दे को हल करेगा।

अपने Mysql कार्यक्षेत्र में निम्नलिखित कोड दर्ज करें और quesry निष्पादित करें

[सवाल / समस्या के लिए स्रोत लिंक]

[उत्तर के लिए स्रोत लिंक]

[समाधान स्क्रीनशॉट]


2
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/resultout? useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC","root",""))

यह वास्तव में इस समस्या का समाधान है, लेकिन इसे अपने प्रोग्राम में कॉपी और पेस्ट न करें। यदि आप सिर्फ पंक्ति पढ़ते हैं तो आपको 'परिणाम' मिलेगा, यह मेरे डेटाबेस का नाम है, और आपको अपना विवरण लिखना होगा।

तीन स्ट्रिंग घटक हैं, पहला एक यूआरएल है, दूसरा उपयोगकर्ता नाम है, और तीसरा पासवर्ड है। ऊपर के पैराग्राफ में हमने क्लियर किया, url। दूसरे और तीसरे स्ट्रिंग के घटकों ने कहा कि आपका उपयोगकर्ता नाम और पासवर्ड आपके अनुसार बदलना होगा।

धन्यवाद


1

मैंने बिना किसी एकल कोड परिवर्तन के इस मुद्दे को हल किया। सिर्फ गोटो सिस्टम टाइम सेटिंग और टाइम ज़ोन सेट करें। मेरे मामले में डिफ़ॉल्ट समय क्षेत्र UTC था जिसे मैंने अपने स्थानीय समय क्षेत्र में बदल दिया था। मैंने सभी सेवाओं को फिर से शुरू करने के बाद, मेरे लिए सब कुछ काम किया।


1

मुझे देर हो रही है, लेकिन यदि आप निम्न त्रुटि से गुजर रहे हैं और डेटा स्रोत (javax.sql.DataSource) का उपयोग कर रहे हैं:

The server time zone value 'CEST' is unrecognized or represents more than one time zone.

त्रुटि से छुटकारा पाने के लिए निम्नलिखित लाइन सेट करें:

MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setServerTimezone("UTC");

1

मेरे मामले में, यह एक परीक्षण का माहौल था और मुझे किसी भी कॉन्फ़िगरेशन परिवर्तन के बिना काम करने के लिए एक मौजूदा एप्लिकेशन बनाना था, और यदि संभव हो तो बिना किसी माइग्रेशन कॉन्फ़िगरेशन के परिवर्तन। मैं @vinnyjames सुझाव का पालन करके और UTC को सर्वर टाइमज़ोन बदलकर समस्या को हल करने में सक्षम था :

ln -sf /usr/share/zoneinfo/UTC /etc/localtime
service mysqld restart

मेरे लिए इस मुद्दे को हल करने के लिए पर्याप्त था।


1

मैंने अपनी /etc/mysql/my.cnfफ़ाइल में निम्न पंक्ति जोड़ी है :

default_time_zone='+00:00'

MySQL सर्वर को पुनरारंभ किया गया:

systemctl restart mysql

और यह एक आकर्षण की तरह काम करता है।


0

@Bluecollarcoder उत्तर से सहमत हैं, लेकिन TimeZone.getDefault().getID();कनेक्शन स्ट्रिंग के अंत में उपयोग करना बेहतर है :

"jdbc:mysql://localhost/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=" + TimeZone.getDefault().getID();  

इस मामले में Timezoneपैरामीटर स्वचालित रूप से स्थानीय मशीन टाइमज़ोन पर निर्भर करता है।


यह सही नहीं है। उपयोग की बात है LegacyDatetimeCode = false सर्वर टाइमज़ोन निर्दिष्ट करने के लिए नहीं है, इसलिए क्लाइंट टाइमज़ोन भिन्नता को ठीक करता है।
antgar9

0

बस Application.properties फ़ाइल में निम्न कोड के साथ कनेक्शन स्ट्रिंग को संशोधित करें।


spring.datasource.url=jdbc:mysql://localhost:3301/Db?
   useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=
   false&serverTimezone=UTC

0

यूटीसी के रूप में सर्वर समय निर्धारित करने का कोई प्रभाव नहीं है (उदाहरण के लिए jdbc:mysql://localhost:3306/myschema?serverTimezone=UTC, भले ही आपका एप्लिकेशन / डेटाबेस सर्वर इस टाइमज़ोन में नहीं हैं। महत्वपूर्ण यह है कि कनेक्शन कनेक्शन स्ट्रिंग + डेटाबेस के लिए समान समय क्षेत्र के साथ सिंक्रनाइज़ किया जाए।

दूसरे शब्दों में, बस serverTimezone=UTCडेटाबेस सर्वर पर एक अलग समय क्षेत्र के साथ सेटिंग डेटाबेस से निकाले गए किसी भी तारीख को स्थानांतरित कर देगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.