মাইএসকিউএল জেডিবিসি ড্রাইভার 5.1.33 - সময় অঞ্চল ইস্যু


359

কিছু পটভূমি:

টমকাট on এ আমার একটি জাভা 1.6 ওয়েব অ্যাপ চলছে The ডাটাবেসটি মাইএসকিউএল 5.5। পূর্বে, আমি ডিবিতে সংযোগের জন্য মাইএসকিএল জেডিবিসি ড্রাইভার 5.1.23 ব্যবহার করছিলাম। সব কাজ। আমি সম্প্রতি মাইএসকিএল জেডিবিসি ড্রাইভার 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
আপনার জেডিবিসি ইউআরএল দেখতে কেমন?
ডেভিড লেভসেক

আমার উত্তরটি stackoverflow.com/a/44720416/4592448 দেখুন । আমি এর সেরা উত্তর মনে করি)
ফোর্টরান

উত্তর:


673

স্পষ্টতই, ইউটিসি টাইম জোনের সাথে কাজ করার জন্য মাইএসকিউএল জেডিবিসি ড্রাইভারের 5.1.33 সংস্করণটি পেতে serverTimezone, সংযোগের স্ট্রিংয়ে স্পষ্টভাবে উল্লেখ করতে হবে ।

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

4
দস্তাবেজগুলির মতে JLBCompliantTimezoneShift এর ব্যবহারের ক্ষেত্রে লেগ্যাসিডেটটাইমকোড = মিথ্যা ব্যবহারের কোনও প্রভাব নেই। সুতরাং এটির দরকার নেই ...
matof

24
এটি আমার ত্রুটি সমাধান করে। অতিরিক্ত দ্রষ্টব্য, & সহ & amp; এড়িয়ে চলুন in persistance.xML ফাইল: <সম্পত্তি নাম = "javax.persistance.jdbc.url" মান = "jdbc: mysql: // লোকালহোস্ট / পরীক্ষা? ইউজিকোড = সত্য & amp; ইউজডিজিবিসিপিলিয়েন্টটাইমজোনশিফট = সত্য & amp; ইউজারলিজিডেটটাইমকোড = মিথ্যা & amp; ইউআরপি; টাইমজোন;"
পিডিএম

5
এটি সঠিক নয়। ব্যবহারের বিন্দু লেগ্যাসিডিটেমটাইম কোড = মিথ্যা সার্ভারটাইমজোন নির্দিষ্ট করতে হবে না তাই ক্লায়েন্ট টাইমজোন ডিফারেন্সকে সংশোধন করে। এটি মাইএসকিউএল ক্লায়েন্টের সেই সংস্করণে একটি বাগ।
antgar9

2
এই সমাধানটি GMT ব্যতীত সময় অঞ্চলকে নষ্ট করে দেয়। আমি মনে করি সঠিক সমাধানটি নীচের নীচে একটি
আন্ডাররেটেড হয়েছে

1
সমাধান 8.0.17 সঙ্গে কাজ করে। একটি নতুন মাইএসকিউএল ইনস্টলেশন সহ হয়েছে pp বিশ্বাস করা যায় না যে এত বছর পরেও এই বাগটি ঠিক করা হয়নি।
তিলমান হাউশার

101

আমি মাইএসকিউএল কনফিগার করে এই সমস্যাটি সমাধান করেছি।

SET GLOBAL time_zone = '+3:00';


6
আপনি MSK সময় অঞ্চল ব্যবহার করছেন যদি এটি +3, তারপর আপনি একটি ডিবি ঠিকানা হিসাবে folowing ব্যবহার করতে পারেন: jdbc:mysql://localhost/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Europe/Moscow। দেখে মনে হচ্ছে মাইএসকিএল-সংযোগকারী সংক্ষিপ্ত টাইমজোন নাম বুঝতে পারে না।
বেবাই

2
দিবালোক সঞ্চয়ের সময় যখন ঘড়ির পরিবর্তন করে আপনি কী করবেন?
ইস্পির

3
Mysql 8.0 এর মাধ্যমে আপনি "সেট অবিরত সময়_জোন = '+00: 00' কল করতে পারবেন;" এটি অবিচ্ছিন্নভাবে ইউটিসি তে সেট করতে, my.cnf সম্পাদনা বা সার্ভার পুনরায় আরম্ভ করার প্রয়োজন ছাড়াই। দেখুন mysqlserverteam.com/...
ccleve

যদি আপনি এটি কোনও অনন্য ম্যানুয়াল এসকিউএল কোয়েরির মাধ্যমে সেট করে থাকেন তবে এই সেটিংটি ডিবি পুনঃসূচনা করার পরে মূল মানটি কী হবে তা ফিরিয়ে আনবে।
সিবিএ 1110

কাজ করে - আপনার স্থানীয় সময় অঞ্চল স্ট্রিং +3 SET GLOBAL সময়_জোন = '+3: 00' এর জায়গায় পরিবর্তন করতে মনে রাখবেন;
প্রভিন

61

এই বিষয়টিতে বেশ কয়েকটি পোস্ট পড়ার পরে, বিভিন্ন কনফিগারেশন পরীক্ষা করে এবং এই মাইএসকিএল বাগ থ্রেডের কিছু অন্তর্দৃষ্টি ভিত্তিক যা আমি বুঝতে পেরেছি:

  • ডাটাবেসে সঞ্চিত তারিখগুলি অ্যাপ্লিকেশন সার্ভারের টাইম জোনে রূপান্তর করতে সার্ভারের সময় অঞ্চলটি বিশেষত গুরুত্বপূর্ণ। অন্যান্য জড়িত রয়েছে তবে এটি সবচেয়ে লক্ষণীয়
  • জিএমটি এক্স ইউটিসি টাইম জোন সিস্টেম। জিএমটি 19নবিংশ শতাব্দীর শেষের দিকে ধারণা করা হয়েছিল এবং মানক সময় এবং গ্রীষ্মের সময়ের মধ্যে স্থানান্তরিত হতে পারে। এই সম্পত্তিটি এমন পরিস্থিতিতে ডেকে আনতে পারে যেখানে ডেটাবেস সার্ভার গ্রীষ্মের সময় পরিবর্তিত হয় এবং অ্যাপ্লিকেশন এটি লক্ষ্য করে না (সম্ভবত অন্যান্য জটিলতা রয়েছে তবে আমি আরও গবেষণা করিনি)। ইউটিসি সময়ের সাথে আলাদা হয় না (এটি সর্বদা 0 solar দ্রাঘিমাংশে সৌর সময়ের প্রায় 1 সেকেন্ডের মধ্যে থাকে)।
  • সার্ভারটাইমজোন সংজ্ঞা 5.1 এগিয়ে মাইএসকিএল জেডিবিসি সংযোগকারী সংস্করণে প্রবর্তিত হয়েছিল। সংস্করণ 8 পর্যন্ত এটি এড়ানো যায় useLegacyDatetimeCode=trueযা এর সাথে মিলিয়ে useJDBCCompliantTimezoneShift=trueঅ্যাপ্লিকেশনটি প্রতিটি সংযোগে ডাটাবেস সময় অঞ্চল পেতে পারে। এই মোডে GMT সময় অঞ্চল যেমন 'ব্রিটিশ গ্রীষ্মকালীন সময়' অভ্যন্তরীণ জাভা / জেডিবিসি ফর্ম্যাটে রূপান্তরিত হবে। নতুন সময় অঞ্চলগুলি এই হিসাবে একটি .poperties ফাইলে সংজ্ঞায়িত করা যেতে পারে
  • Jdbc ড্রাইভার সংস্করণ 8 দিয়ে শুরু করে, স্বয়ংক্রিয় সময় ম্যাচিং ( useJDBCCompliantTimezoneShift) এবং উত্তরাধিকার সময় বিন্যাস ( useLegacyDatetimeCode) সরিয়ে ফেলা হয়েছে ( mysql jdbc সংযোজক চেঞ্জলগ দেখুন )। সুতরাং এই 2 পরামিতিগুলি সেট করার কোনও প্রভাব নেই কারণ এগুলি সম্পূর্ণ উপেক্ষা করা হয় (নতুন ডিফল্ট হয় useLegacyDateTimeCode=false)
  • এই পদ্ধতিতে কোনও সময় অঞ্চল (অ্যাপ্লিকেশন / ডাটাবেস সার্ভার) 'ইউটিসি + এক্সএক্স' বা 'জিএমটি + এক্সএক্স' বিন্যাসে না থাকলে সেটিংটি বাধ্যতামূলকserverTimezone হয়ে উঠেছে
  • ইউটিসি হিসাবে সার্ভারের সময় সেট করার কোনও প্রভাব নেই (উদাহরণস্বরূপ jdbc:mysql://localhost:3306/myschema?serverTimezone=UTC, আপনার অ্যাপ্লিকেশন / ডাটাবেস সার্ভারগুলি এই সময় অঞ্চলে না থাকলেও গুরুত্বপূর্ণ সময়টি অ্যাপ্লিকেশন সংযোগ স্ট্রিং + ডাটাবেসকে একই টাইম জোনের সাথে সিঙ্ক্রোনাইজ করা যায় different বিভিন্ন শব্দে) , কেবল serverTimezone সেটিং ডাটাবেসের সার্ভারে একটি ভিন্ন সময় জোনে ডাটাবেস থেকে নিষ্কাশিত কোনো তারিখ নামান হবে ইউটিসি =
  • মাইএসকিউএল ডিফল্ট সময় জোন my.ini বা my.cnf ফাইলগুলির সাথে ইউটিসি 0 নির্ধারণ করা যাবে (উইন্ডোজ / লিনাক্স যথাক্রমে) লাইন জুড়ে default-time-zone='+00:00'(ইন বিশদ এই Stackoverflow পোস্ট )
  • এডাব্লুএস (অ্যামাজন ওয়েব সার্ভিসেস) এ কনফিগার করা ডেটাবেসগুলি স্বয়ংক্রিয়ভাবে ইউটিসি + 0 ডিফল্ট সময় নির্ধারিত হয় ( এডাব্লুএস সহায়তা পৃষ্ঠাটি এখানে দেখুন )

1
ভাল উত্তর, ধন্যবাদ। বিভিন্ন বুলেট সব দরকারী। আমি default-time-zone = '+00:00'হোমব্রিউ /usr/local/etc/my.cnfফাইলটিতে একটি রাখার পরামর্শ দিয়েছিলাম । দেখে মনে হচ্ছে এর চারপাশের স্পেসগুলি =গুরুত্বপূর্ণ তবে আপনি সেগুলি অন্তর্ভুক্ত করার জন্য সেই বুলেটটি সম্পাদনা করতে পারেন।
মার্ক এডিংটন

51

আপনি যদি মাভেন ব্যবহার করছেন, আপনি কেবলমাত্র অন্য একটি মাইএসকিউএল সংযোগকারী সংস্করণ সেট করতে পারেন (আমারও একই ত্রুটি ছিল, সুতরাং আমি 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
যারা মাইএসকিএল-সংযোজক-জাভা / 6 -> ডাউনলোড করেছেন তাদের জন্য যেমন উদাহরণস্বরূপ মাইএসকিএল-সংযোজক-জাভা / 5.1.20 ডাউনলোড করুন এবং এটি কার্যকর হওয়া উচিত। ধন্যবাদ!
একত্রিত করুন

6
ডাউনগ্রেডিং এড়ানো উচিত। এছাড়াও, এটি স্থির সঙ্গে স্থির করা 6.0.6হয়নি। উপরের সমাধানটি ব্যবহার করা আরও ভাল
phil294

সর্বশেষ জার [মাইএসকিএল-সংযোগকারী-জাভা-6.০.৫.জার: .0.০.৫]
ব্যবহারকারী 2478236

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
এটি সঠিক নয়। ব্যবহারের বিন্দু লেগ্যাসিডিটেমটাইম কোড = মিথ্যা সার্ভারটাইমজোন নির্দিষ্ট করতে হবে না তাই ক্লায়েন্ট টাইমজোন ডিফারেন্সকে সংশোধন করে।
antgar9

এটি আমার জন্য পিএইচপিএসটর্ম 2019.1.4 এর সাথে মাইএসকিউএল 5.7 এর সাথে সংযোগ স্থাপনের জন্য কাজ করেছে।
moult86

29

এটি মাইএসকিএল-সংযোজক-জাভাতে 5.1.33 থেকে 5.1.37 সংস্করণে একটি বাগ bu আমি এটি এখানে রিপোর্ট করেছি: http://bugs.mysql.com/bug.php?id=79343

সম্পাদিত: এটি mysql- সংযোজক-জাভা 5.1.39 থেকে সংশোধন করা হয়েছে

এটি লোডটাইমজোনম্যাপিংস পদ্ধতিতে টাইমআপিল ক্লাসে একটি টাইপ ছিল যা একটি এনপিই লোকেটিং / কম / মাইএসকিএল / জেডিবিসি / টাইমজোনম্যাপিং.প্রপ্রেটিস ফাইলটি উত্থাপন করে। আপনি যদি কোডটি দেখেন, ফাইলটি টাইমজোন নয়, টাইমUtil বর্গ লোডার মধ্যে থাকা উচিত:

TimeUtil.class.getResourceAsStream(TIME_ZONE_MAPPINGS_RESOURCE);

ব্যবহারের পরামিতি লেগ্যাসিডেটটাইমকোড তারিখগুলি ব্যবহার করার সময় ক্লায়েন্ট এবং সার্ভারের সময় অঞ্চলগুলির মধ্যে পার্থক্যটি স্বয়ংক্রিয়ভাবে সংশোধন করতে দেয়। সুতরাং এটি আপনাকে প্রতিটি অংশে সময় অঞ্চল নির্দিষ্ট করে না দেওয়ার জন্য সুনির্দিষ্টভাবে সহায়তা করে। সার্ভারটাইমজোন প্যারামিটারটি ব্যবহার করার বিষয়টি অবিচ্ছিন্ন , এবং ইতিমধ্যে প্যাচটি প্রকাশ করা হয়েছে, আপনি নিজের মতো করে কোডটি সংশোধন করার চেষ্টা করতে পারেন যেমন আমি করেছি।

  • যদি এটি একটি স্বতন্ত্র অ্যাপ্লিকেশন হয় তবে আপনি নিজের কোডটিতে একটি সংশোধিত কম / মাইএসকিএল / জেডিবিসি / টাইমআপিল ক্লাস যুক্ত করার চেষ্টা করতে পারেন এবং জার লোডিং ক্রমের সাথে সতর্ক হন। এটি সহায়তা করতে পারে: https://owenou.com/2010/07/20/patching-with-class-shadowing-and-maven.html

  • এটি যদি কোনও ওয়েব অ্যাপ্লিকেশন হয় তবে সহজ সমাধানটি হ'ল নিজের জালটিতে সরাসরি মাইএসকিএল-সংযোজক-জাভা-5.1.37-patched.jar তৈরি করা।


মিষ্টি, এটি রিপোর্ট করার জন্য ধন্যবাদ। খুশী কেউ বাগটি পিন করতে সক্ষম হয়েছে। ফিক্স কখন প্রকাশিত হবে জানেন?
bluecollarcoder

আপনি যে সমাধানটি পরামর্শ দিচ্ছেন তা দুর্দান্ত, তবে আমি মনে করি ড্রাইভার উত্সটি সংশোধন করা এবং মাভেন নির্ভরতা পরিচালনা করা সম্ভবত বেশিরভাগ মানুষের পক্ষে খুব বিরক্তিকর।
bluecollarcoder

4
@ গিলি এটি 6.0.6
ইমেমে 22009

6
বাগটি 8.0.11
জন লিটল

3
@ জনলিটল আমি এই সমস্যাটি ৮.০.১৫-এ পেয়েছি, কিন্তু বাগের ফলে আর হয় নি। সময়ের অঞ্চলগুলোকে সঠিকভাবে লোড হয়, কিন্তু কেউই মধ্যে সিইটি এবং Cest (আমাকে কষ্ট কারণ এই সময়ের অঞ্চলগুলোকে) অন্তর্ভুক্ত করা হয় না TimeZone.getAvailableIDs()কিংবা এ TimeZoneMapping.propertiesতাই এই সমাধান এখানে সাহায্য করবে না। সমাধানটি সম্ভবত সেটটি স্থাপন করবেserverTimezone=Europe/Berlin
জেপিটি

29

আমি URL এ সংযোগের স্ট্রিংয়ের নিচে রেখে সমাধান করেছি putting

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

1
এটি সঠিক নয়। ব্যবহারের বিন্দু লেগ্যাসিডিটেমটাইম কোড = মিথ্যা সার্ভারটাইমজোন নির্দিষ্ট করতে হবে না তাই ক্লায়েন্ট টাইমজোন ডিফারেন্সকে সংশোধন করে।
antgar9

25

এটি কেবল প্রয়োগের জন্য সার্ভারটাইমজোন = ইউটিসি যোগ করে আমার পক্ষে কাজ করেছে rop
spring.datasource.url=jdbc:mysql://localhost/db?serverTimezone=UTC


22
  1. আমি বিভাগে মাইএসকিএল কনফিগারেশন ফাইলটিতে যুক্ত করেছি [মাইএসকিএলডি]

    default_time_zone='+03:00'
  2. এবং মাইএসকিএল সার্ভার পুনরায় চালু করুন:

    sudo service mysql restart

যেখানে +03: 00 আমার ইউটিসি সময় অঞ্চল।

আমার ওস ওবুন্টু 16.04 এ ফাইল কনফিগার করার পথ:

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

সতর্কতা: যদি আপনার সময় অঞ্চলটি গ্রীষ্মকালীন এবং শীতের সময় থাকে। আপনি যদি সময় পরিবর্তন করেন তবে আপনাকে কনফিগ-তে ইউটিসি পরিবর্তন করতে হবে। দুই বছরে (সাধারণত) বা সুডোর সাথে ক্রন্টব্যাক সেট করুন।

আমার ইউআরএল জেডিবিসি সংযোগ:

"jdbc:mysql://localhost/java"

1
মাইএসকিএল পুনরায় চালু করা মূলত প্রায় সমস্ত উত্পাদন ব্যবহারের ক্ষেত্রে একটি ননস্টার্টার। প্রতিলিপিগুলি জড়িত থাকাকালীন এটি আরও সমস্যার আকার ধারণ করে।
bluecollarcoder

@ ব্লুএক্লোলারকোডারটি কেবল [মাইএসকিএলডি] বিভাগে যুক্ত করতে হবে। অথবা [মাইকিকিএলডি] বিভাগটি না থাকলে এটি যুক্ত করুন। আমার কনফিগারেশন পেস্টবিন.com
ফোর্টরান

1
আমি আমার লিনাক্স সার্ভারের / ইত্যাদি / স্থানীয় সময় / ইউএসআর / শেয়ার / জোনিনফো / মার্কিন / প্যাসিফিক থেকে / ইউএসআর / শেয়ার / জোনিনফো / আমেরিকা / লস_এঞ্জেলসকে আপডেট করে তারপর মাইএসকিএল পরিষেবাটি পুনরায় শুরু করেছি এবং এটি আমার জন্য সমস্যাটি স্থির করেছে।
ভিনিজেমস

প্রদত্ত সিনট্যাক্সের ক্ষেত্রে আমার ক্ষেত্রে, পুনরায় চালু করার সময় একটি ত্রুটি হয়েছিল এবং সঠিক বাক্য গঠনটি ছিল: default-time-zone='+03:00'পরিবর্তে, এই উত্তর অনুসারে । ডিবিভার থেকেও আসছে।
wscourge

আপনার কোম্পানির প্রতিটি বিকাশকারীকে তাদের মাইএসকিউএল কনফিগারেশন পরিবর্তন করতে বললে এটি যথাযথ নয় :)
ফেরোমিক্স

16

আমার একই সমস্যা আছে এবং আমি এটি সমাধান করেছি কেবল আমার স্ট্রিং সংযোগে "? সার্ভারটাইমজোন = ইউটিসি" যুক্ত করুন end

#

আমার সমস্যা সাইনোসি:

java.sql.SQLException: সার্ভারের টাইম জোনের মান 'CEST' অজানা or বা একাধিক টাইম জোনের প্রতিনিধিত্ব করে। আপনি সময় অঞ্চল সমর্থনটি ব্যবহার করতে চাইলে আরও নির্দিষ্ট সময় অঞ্চল মান ব্যবহার করতে আপনাকে সার্ভার বা জেডিবিসি ড্রাইভারকে (সার্ভারটাইমজোন কনফিগারেশন সম্পত্তি মাধ্যমে) কনফিগার করতে হবে।

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 - মাইএসকিউএল সম্প্রদায় সার্ভার - জিপিএল

উত্স: https://commune.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

আপনি ম্যাভেন নির্ভরতাতে মাইএসকিউএল সংযোগকারী ব্যবহার করতে পারেন,

<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

আমি মাইএসকিএল-সংযোজক-জাভা -8.0.13 ব্যবহার করছি এবং একই সমস্যা ছিল। আমি কমান্ড লাইন কনসোলে আমার ডাটাবেস তৈরি করেছি এবং কমান্ড লাইনে @ ডিমিট্রি রুডের সমাধান ব্যবহার করে এই সমস্যাটি সমাধান করেছি:

SET GLOBAL time_zone = '-6:00';

আমার কোনও কিছু পুনরায় আরম্ভ করার দরকার নেই, সময় নির্ধারণ করা এবং তাত্ক্ষণিকভাবে আমার কোডটি গ্রহনে চালানো দরকার, এটি কোনও সমস্যা ছাড়াই সংযুক্ত।

পুরানো সংস্করণে বাগটি ঠিক করার কথা, তবে আমি মনে করি এই ত্রুটিটি পেয়েছি কারণ কনসোলে ডেটাবেস তৈরি করার পরে, আমি এটি সেট করিনি। কনসোলের চেয়ে এটি পরিচালনা করতে আমি ওয়ার্কবেঞ্চ বা অন্য কোনও অ্যাপ ব্যবহার করছি না।


6

মাইএসকিউএল ওয়ার্কবেঞ্চ থেকে নিম্নলিখিত স্কোল স্টেটমেন্টগুলি চালান:

  1. SET @@ গ্লোবাল.টাইম_জোন = '+00: 00';
  2. SET @@ সেশন.টাইম_জোন = '+00: 00';

নিম্নলিখিত sql বিবৃতিতে মানগুলি সেট করা আছে কিনা তা পরীক্ষা করে দেখুন:

নির্বাচন করুন @@ গ্লোবাল.টাইম_জোন, @@ সেশন.টাইম_জোন;


2
এটি আমার জন্য কাজ করেছিল যখন ইন্টেলিজ আইডিইএ থেকে সংযোগ দেওয়ার চেষ্টা করার সময় প্রশ্নে ত্রুটিটি পপ আপ হয়েছিল।
ফাহিম হাসান জুনজানি

6

এটি আমার পক্ষে কাজ করেছে।

ডিবিভার 6.0 এ: সংযোগ সেটিংস> ড্রাইভার বৈশিষ্ট্য> সার্ভারের সময় অঞ্চল> ইউটিসি সেট করুন এ যান।

এছাড়াও, বসন্ত বুট কনফিগারেশনে, সম্পত্তি নীচে সেট করতে হয়েছিল।

JDBC: MySQL: // স্থানীয় হোস্ট: / serverTimezone = ইউটিসি


5

স্পষ্টতই, ইউটিসি টাইম জোনের সাথে কাজ করার জন্য মাইএসকিউএল জেডিবিসি ড্রাইভারের 5.1.33 সংস্করণটি পেতে, সংযোগের স্ট্রিংয়ে সার্ভারটাইমজোনকে স্পষ্টভাবে নির্দিষ্ট করতে হবে।

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

3

আমারও একই রকম সমস্যা ছিল লিবার অফিস বেসে in সুতরাং আমি সংযোগ স্ট্রিংয়ে কেবল একটি 'দিবালোক সঞ্চয় সময় অঞ্চল' নির্দিষ্ট করেছি।
** এখানে চিত্রের বর্ণনা লিখুন **

আমি "& সার্ভারটাইমজোন = এমএসটি" ছাড়াই চেষ্টা করেছি তবে সেটিও ব্যর্থ হয়েছে।

আমি "& সার্ভারটাইমজোন = এমডিটি" চেষ্টা করেছিলাম এবং এটি ব্যর্থ হয়েছিল, তাই কোনও কারণে, এটি দিবালোকের সঞ্চয় সময় পছন্দ করে না!


3

উইন্ডোতে স্প্রিং বুট প্রকল্পের সাথে কাজ করার চেষ্টা করার সময় আমার একই সমস্যা হয়েছিল।

ডাটাসোর্স ইউআরএল হওয়া উচিত:

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


3

ত্রুটিটি সমাধান করতে মাইএসকিএল ডিবিতে ক্যোয়ারির নীচে চালান

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

আমি আপনার মতো ত্রুটি পেয়েছি তবে আমার সার্ভারের সময় অঞ্চলের মান 'আফর'। Centrale Ouest 'সুতরাং আমি এই পদক্ষেপগুলি করেছি:

মাই ইরর (ইন্টেলিজ আইডিইএ সম্প্রদায় সংস্করণে):

    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....

আমি যখন আমার মাইএসকিএল সার্ভারকে এসকিউএল সার্ভার 8.0 (এমওয়াইএসকিউএল 80) তে আপগ্রেড করেছি তখন আমি এই সমস্যার মুখোমুখি হয়েছি।

এই সমস্যার সহজ সমাধানটি কেবল আপনার এমওয়াইএসকিউএল ওয়ার্কবেঞ্চে নীচের আদেশটি লিখুন -

  SET GLOBAL time_zone = '+1:00'

সময়-অঞ্চলের পরে মান GMT +/- এর সমান হবে আপনার সময় অঞ্চলের পার্থক্য। উপরের উদাহরণটি উত্তর আফ্রিকার (GMT + 1: 00) / বা ভারতের জন্য (GMT + 5: 30)। এটি সমস্যার সমাধান করবে।

আপনার মাইএসকিএল ওয়ার্কবেঞ্চে নিম্নলিখিত কোডটি প্রবেশ করান এবং অনুসন্ধান চালানো

[প্রশ্ন / সমস্যার জন্য উত্স লিঙ্ক]

[উত্তরের উত্স লিঙ্ক]

[সমাধান স্ক্রিনশট]


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

এটি আসলে এই সমস্যার সমাধান তবে এটি কেবল আপনার প্রোগ্রামটিতে অনুলিপি করুন এবং আটকে দিন না। আপনি যদি কেবল লাইনটি পড়েন তবে আপনি 'রেজাল্ট আউট' দেখতে পাবেন, এটি আমার ডাটাবেসের নাম এবং আপনাকে নিজের লেখাতে হবে।

তিনটি স্ট্রিং উপাদান রয়েছে, প্রথমটি url, দ্বিতীয়টি ব্যবহারকারীর নাম এবং তৃতীয়টি হল পাসওয়ার্ড। উপরের অনুচ্ছেদে আমরা সাফ করেছি, url। দ্বিতীয় এবং তৃতীয় স্ট্রিং উপাদানগুলি যেমন আপনার ব্যবহারকারী নাম এবং পাসওয়ার্ড বলেছিল সে অনুসারে আপনাকে পরিবর্তন করতে হবে।

ধন্যবাদ


1

আমি কোনও একক কোড পরিবর্তন ছাড়াই এই সমস্যাটি সমাধান করেছি। সিস্টেমের সময় ঠিক করতে এবং সময় অঞ্চল নির্ধারণ করুন। আমার ক্ষেত্রে ডিফল্ট সময় অঞ্চলটি ইউটিসি ছিল যা আমি আমার স্থানীয় সময় অঞ্চলে পরিবর্তন করেছিলাম। আমি সমস্ত পরিষেবা পুনরায় চালু করার পরে, সমস্ত কিছু আমার জন্য কাজ করেছিল।


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 পরামর্শ অনুসরণ করে এবং ইউটিসি-তে সার্ভারের সময় অঞ্চল পরিবর্তন করে সমস্যাটি সমাধান করতে সক্ষম হয়েছি :

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

বিষয়টি করা আমার পক্ষে সমস্যাটি সমাধান করার পক্ষে যথেষ্ট ছিল।


1

আমি আমার /etc/mysql/my.cnfফাইলে নিম্নলিখিত লাইনটি যুক্ত করেছি :

default_time_zone='+00:00'

মাইএসকিউএল সার্ভারটি পুনরায় চালু করুন:

systemctl restart mysql

এবং এটি একটি কবজ মত কাজ করে।


0

@ ব্লুক্লোলারকোডার উত্তরের সাথে সম্মত TimeZone.getDefault().getID();হন তবে সংযোগের স্ট্রিংয়ের শেষে ব্যবহার করা ভাল :

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

এই ক্ষেত্রে Timezoneপ্যারামিটার স্থানীয় মেশিনের সময় অঞ্চলের উপর নির্ভর করে স্বয়ংক্রিয়ভাবে আপডেট হয়।


এটি সঠিক নয়। ব্যবহারের বিন্দু লেগ্যাসিডিটেমটাইম কোড = মিথ্যা সার্ভারটাইমজোন নির্দিষ্ট করতে হবে না তাই ক্লায়েন্ট টাইমজোন ডিফারেন্সকে সংশোধন করে।
antgar9

0

অ্যাপ্লিকেশন.প্রপার্টি ফাইলগুলিতে কেবল নিম্নলিখিত কোডের সাথে সংযোগের স্ট্রিংটি পরিবর্তন করুন।


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

0

ইউটিসি হিসাবে সার্ভারের সময় সেট করার কোনও প্রভাব নেই (উদাহরণস্বরূপ jdbc:mysql://localhost:3306/myschema?serverTimezone=UTC, যদিও আপনার অ্যাপ্লিকেশন / ডাটাবেস সার্ভারগুলি এই সময় অঞ্চলে নাও রয়েছে the একই সময় জোনের সাথে অ্যাপ্লিকেশন সংযোগ স্ট্রিং + ডাটাবেস সিঙ্ক্রোনাইজ করার জন্য গুরুত্বপূর্ণ।

অন্য কথায়, সহজভাবে সেট serverTimezone=UTC ডাটাবেস সার্ভারে একটি আলাদা টাইম জোনের সাথে করা ডাটাবেস থেকে বের হওয়া যে কোনও তারিখ সরিয়ে ফেলবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.