MySQL JDBC Sürücüsü 5.1.33 - Saat Dilimi Sorunu


362

Bazı bilgiler:

Tomcat 7 üzerinde çalışan bir Java 1.6 webapp var. Veritabanı MySQL 5.5. Daha önce, DB'ye bağlanmak için Mysql JDBC sürücüsü 5.1.23 kullanıyordum. Her şey işe yaradı. Geçenlerde Mysql JDBC sürücüsüne 5.1.33 sürümüne geçtim. Yeni sürüme geçişten sonra, Tomcat uygulamayı başlatırken bu hatayı atar.

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.

Bu neden oluyor?


1
JDBC URL'niz nasıl görünüyor?
David Levesque

Cevabımı kontrol et stackoverflow.com/a/44720416/4592448 . En iyi cevabı düşünüyorum)
Fortran

Yanıtlar:


678

Görünüşe göre, MySQL JDBC sürücüsünün 5.1.33 sürümünün UTC saat dilimi ile çalışmasını sağlamak serverTimezoneiçin bağlantı dizesinde açıkça belirtilmelidir.

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

4
Göre docs = false useLegacyDatetimeCode kullanırken useJDBCCompliantTimezoneShift etkisi yoktur. Bu nedenle orada gerekli değil ...
matof

24
Bu benim hatamı çözer. Ek not, & ile & amp; persistence.xml dosyasında: <property name = "javax.persistence.jdbc.url" value = "jdbc: mysql: // localhost / test? useUnicode = true & amp; useJDBCCompliantTimezoneShift = true & amp; useLegacyDatetimeCode = yanlış & amp = UTCTim = sunucu"
pdem

5
Bu doğru değil. UseLegacyDatetimeCode = false noktasının serverTimezone öğesini belirtmesi gerekmez, böylece istemci saat dilimi farklılıklarını düzeltir. MySQL istemcisinin bu sürümünde bir hata.
antgar9

2
Bu çözüm GMT hariç saat dilimini mahveder. Bence doğru çözüm aşağıda bir
eksiktir

1
çözüm 8.0.17 ile çalışır. Yeni bir MySQL kurulumuyla oldu. Yıllar sonra bu hatanın giderilmediğine inanamıyorum.
Tilman Hausherr

102

MySQL'i yapılandırarak bu sorunu çözdüm.

SET GLOBAL time_zone = '+3:00';


6
Eğer MSK dilimini kullanıyorsanız o zaman bir db adresi olarak folowing kullanabilir, 3 bulunuyor: jdbc:mysql://localhost/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Europe/Moscow. Görünüşe göre mysql-bağlayıcı kısa saat dilimi adlarını anlamıyor.
babay

2
Yaz Saati uygulaması saati değiştirdiğinde ne yaparsınız?
isapir

3
Mysql 8.0 ile "set persist time_zone = '+00: 00';" my.cnf dosyasını düzenlemenize veya sunucuyu yeniden başlatmanıza gerek kalmadan kalıcı olarak UTC'ye ayarlamak için. Bkz. Mysqlserverteam.com/…
ccleve

Bunu benzersiz bir manuel SQL sorgusu ile ayarlıyorsanız, bu ayar bir DB yeniden başlatıldıktan sonra orijinal değerin ne olduğuna geri döner.
CBA110

çalışıyor - yerel saat dilimi dizenizi +3 SET GLOBAL yerine değiştirmeyi unutmayın time_zone = '+3: 00';
Pravin

61

Bu konuyla ilgili çeşitli mesajları okuduktan sonra, farklı yapılandırmaları test ettikten ve bu mysql hata iş parçacığından bazı anlayışlara dayanarak anladığım şey:

  • sunucu saat dilimi özellikle veritabanında depolanan tarihleri ​​uygulama sunucusunun saat dilimine dönüştürmek için önemlidir. başka çıkarımlar da var ama bu en dikkat çekici olanı
  • GMT x UTC saat dilimi sistemleri. GMT 19. yüzyılın sonlarında tasarlandı ve standart saat ile yaz saati arasında değiştirilebilir. Bu özellik, veritabanı sunucusunun yaz saatine geçtiği ve uygulamanın bunu fark etmediği bir duruma yol açabilir (belki de başka komplikasyonlar vardır, ancak daha fazla araştırma yapmadım). UTC zaman içinde değişmez (her zaman 0 ° boylamında ortalama güneş süresinin yaklaşık 1 saniye içinde).
  • serverTimeZone tanımı, önceki 5.1 sürümünde mysql jdbc bağlayıcılarında tanıtıldı. sürüm 8'e kadar göz ardı edilebilir useLegacyDatetimeCode=true; bu useJDBCCompliantTimezoneShift=true, uygulamanın her bağlantıda veritabanı saat dilimini almasını sağlar. Bu modda, 'İngiliz Yaz Saati' gibi GMT saat dilimleri dahili java / JDBC biçimine dönüştürülür. Bu gibi bir .properties dosyasında yeni saat dilimleri tanımlanabilir
  • JDBC sürücüsü sürüm 8 ile başlayarak, otomatik zaman eşleme ( useJDBCCompliantTimezoneShift) ve eski zaman formatı ( useLegacyDatetimeCode) kaldırıldı ( bkz. Mysql jdbc bağlayıcı değişiklik günlüğü ). bu nedenle bu 2 parametrenin ayarlanmasının tamamen yok sayıldıkları için bir etkisi yoktur (yeni varsayılan değer useLegacyDateTimeCode=false)
  • Bu şekilde , saat dilimlerinden herhangi biri (uygulama / veritabanı sunucuları) 'UTC + xx' veya 'GMT + xx' biçiminde değilse ayar zorunluserverTimezone hale geldi
  • Sunucu saatini UTC olarak ayarlamanın bir etkisi yoktur (örneğin jdbc:mysql://localhost:3306/myschema?serverTimezone=UTC, uygulama / veritabanı sunucularınız bu saat diliminde olmasa bile.) Önemli olan uygulama bağlantı dizesi + veritabanının aynı saat dilimi ile senkronize edilmesidir. , sadece serverTimezone = UTC'yi veritabanı sunucusunda farklı bir saat dilimi ile ayarlamak, veritabanından ayıklanan tarihleri ​​kaydırır
  • MySQL varsayılan saat dilimi, satır ekleyerek my.ini veya my.cnf dosyalarıyla (sırasıyla windows / linux) UTC + 0 olarak ayarlanabilir default-time-zone='+00:00'( bu StackOverflow yayınındaki ayrıntılar )
  • AWS'de (amazon web hizmetleri) yapılandırılan veritabanlarına otomatik olarak UTC + 0 varsayılan zamanı atanır ( buradan AWS yardım sayfasına bakın )

1
Güzel cevap, teşekkürler. Çeşitli mermilerin hepsi faydalıdır. Ben default-time-zone = '+00:00'homebrew /usr/local/etc/my.cnfdosyasına bir koymak için öneri ile gitti . Öyle görünüyor ki etrafındaki boşluklar =önemli, bu yüzden bu mermiyi onları içerecek şekilde düzenleyebilirsiniz.
Mark Edington

51

Maven kullanıyorsanız, sadece başka bir MySQL bağlayıcı sürümünü ayarlayabilirsiniz (aynı hatayla karşılaştım, bu yüzden 6.0.2'den 5.1.39'a değiştirdim) pom.xml:

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

Başka bir yanıtta bildirildiği gibi, bu sorun 6.0.3 veya daha sonraki sürümlerde düzeltilmiştir, böylece güncellenmiş sürümü kullanabilirsiniz:

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

Maven, pom.xmldosyayı kaydettikten sonra projenizi otomatik olarak yeniden oluşturacaktır .


2
Mysql-connector-java / 6 indirenler için -> sadece mysql-connector-java / 5.1.20 indirmek ve çalışmalıdır. Teşekkürler!
birleştirin

6
indirgemekten kaçınılmalıdır. ayrıca, sabit ile sabit değil 6.0.6. yukarıdaki çözümü kullanmak daha iyi
phil294

en son kavanozda bile aynı hatayı alıyorum [mysql-connector-java-6.0.5.jar: 6.0.5]
user2478236 19:17

18
Bunu 8.0.12'de bile var
Robert Niestroj

13
8.0.13 aynı hatayı verir. 5.1.47 benim için çalışıyor.
localhost

36

Bağlantı dizesi şu şekilde ayarlanmalıdır:

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

Bir bağlantıyı tanımlıyorsanız xmldosyası (örneğin persistence.xml, standalone-full.xmlvb ..), yerine &kullanmanız gereken &amp;veya kullanmak CDATAbloğu.


1
Bu doğru değil. UseLegacyDatetimeCode = false noktasının serverTimezone öğesini belirtmesi gerekmez, böylece istemci saat dilimi farklılıklarını düzeltir.
antgar9

Bu benim için phpStorm 2019.1.4 ile MySQL 5.7'ye bağlanmak için çalıştı.
moult86

29

Bu sürüm 5.1.33 - 5.1.37 mysql-connector-java bir hatadır. Burada bildirdim: http://bugs.mysql.com/bug.php?id=79343

Düzenlendi: Bu, mysql-connector-java 5.1.39'dan düzeltildi.

LoadTimeZoneMappings yöntemindeki TimeUtil sınıfında bir NPE bulma /com/mysql/jdbc/TimeZoneMapping.properties dosyasını yükselten bir yazım hatasıydı. Koda bakarsanız, dosya TimeZone yerine TimeUtil sınıf yükleyicisi içinde bulunmalıdır:

TimeUtil.class.getResourceAsStream(TIME_ZONE_MAPPINGS_RESOURCE);

UseLegacyDatetimeCode parametresi , tarihleri ​​kullanırken istemci ve sunucu saat dilimleri arasındaki farkı otomatik olarak düzeltmeye izin verir. Bu nedenle, her bölümde zaman dilimlerini belirtmek zorunda kalmanıza yardımcı olur. ServerTimeZone parametresini kullanarak alternatif bir çözümdür ve bu arada yama serbest bırakılırken, kodu yaptığım gibi kendiniz düzeltmeyi daha iyi deneyebilirsiniz.

  • Tek başına bir uygulama ise, kodunuza düzeltilmiş bir com / mysql / jdbc / TimeUtil sınıfı eklemeyi deneyebilir ve kavanoz yükleme sırasına dikkat edin. Bu yardımcı olabilir: https://owenou.com/2010/07/20/patching-with-class-shadowing-and-maven.html

  • Bir web uygulamasıysa, daha kolay çözüm kendi mysql-connector-java-5.1.37-patched.jar dosyasını oluşturmak ve .class dosyasını doğrudan orijinal kavanoza koymaktır.


Tatlı, bunu bildirdiğiniz için teşekkürler. Birinin hatayı tespit edebildiğine sevindim. Düzeltmenin ne zaman yayınlanacağını biliyor musunuz?
bluecollarcoder

Önerdiğiniz çözüm harika, ancak sürücü kaynağını değiştirmek ve Maven bağımlılığını yönetmek muhtemelen çoğu insan için çok sinir bozucu.
bluecollarcoder

4
@Gili 6.0.6 sürümünden itibaren bu sorun giderilmedi
Imme22009 21:17

6
Hata 8.0.11
John Little

3
@JohnLittle Bu sorunu 8.0.15'te de aldım, ancak artık hatadan kaynaklanmıyor. Zaman dilimleri doğru yüklendi, ancak CET ve CEST (bu zaman dilimleri bana sorun çıkarıyor) ne ne TimeZone.getAvailableIDs()de içine dahil edilmediğinden TimeZoneMapping.propertiesbu çözüm burada yardımcı olmayacak. Çözüm probaby gibi ayarlanacaktıserverTimezone=Europe/Berlin
JPT

29

URL'de bağlantı dizesinin altına koyarak çözdüm

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

1
Bu doğru değil. UseLegacyDatetimeCode = false noktasının serverTimezone öğesini belirtmesi gerekmez, böylece istemci saat dilimi farklılıklarını düzeltir.
antgar9

25

Sadece application.properties üzerine serverTimeZone = UTC ekleyerek benim için çalıştı.
spring.datasource.url=jdbc:mysql://localhost/db?serverTimezone=UTC


22
  1. [Mysqld] bölümünde mysql yapılandırma dosyasına ekledim

    default_time_zone='+03:00'
  2. Ve mysql sunucusunu yeniden başlatın:

    sudo service mysql restart

Burada UTC saat dilimim +03: 00 .

Benim os ubuntu 16.04 yapılandırma dosyası yolu:

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

UYARI: ZAMAN DİLİMİNİZDE YAZ VE KIŞ ZAMANI VARSA. ZAMANI DEĞİŞTİRİRSEN UTC'yi YAPILANDIRMALISINIZ. YILDA İKİ (genellikle) VEYA SÜT İLE KRONTAB TAKIN.

URL jdbc bağlantım:

"jdbc:mysql://localhost/java"

1
Mysql'i yeniden başlatmak zorunda kalmanız, neredeyse tüm üretim kullanım durumlarında bir başlangıç ​​noktası değildir. Çoğaltmalar söz konusu olduğunda daha da sorun haline gelir.
bluecollarcoder

@bluecollarcoder Yalnızca [mysqld] bölümüne eklemeyi gerektirir. Ya da bölümü yoksa [mysqld] bölümünü ekleyin. Örnek benim yapılandırma pastebin.com/j4F7t2KS
Fortran

1
Linux sunucumun / etc / localtime öğesini / usr / share / zoneinfo / US / Pacific'ten / usr / share / zoneinfo / America / Los_Angeles'e güncelledim ve sonra mysql hizmetini yeniden başlattım ve bu benim için sorunu düzeltti.
vinnyjames

Sağlanan sözdizimi için benim durumumda, yeniden başlatma sırasında bir hata oluştu ve doğru sözdizimi: default-time-zone='+03:00'bunun yerine, bu cevaba göre . Ayrıca DBeaver'dan geliyor.
wscourge

şirketinizdeki her geliştiriciye MySQL yapılandırmasını değiştirmelerini söylemek zorundaysanız uygun değildir :)
pheromix

16

Ben de aynı sorunu var ve ben sadece "? ServerTimezone = UTC" benim dize bağlantı eklemek çözüldü.

#

benim sorunum sinossi:

java.sql.SQLException: Sunucu saat dilimi değeri 'CEST' tanınmıyor veya birden fazla saat dilimini temsil ediyor. Saat dilimi desteğini kullanmak istiyorsanız, sunucuyu veya JDBC sürücüsünü (serverTimezone configuration özelliği aracılığıyla) daha belirgin bir saat dilimi değeri kullanacak şekilde yapılandırmanız gerekir.

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

Yukarıdaki program bu saat dilimi hatasını oluşturacaktır.

Veritabanı adının sonra bu eklemek zorunda: ?useTimezone=true&serverTimezone=UTC. Bunu yaptıktan sonra kodunuz iyi çalışır.

İyi şanslar :)



13

Sorunu çözmek için ihtiyacımız olan her şey serverTimezone:

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

En son 5.4.15 sürümü ile de başıma geldi. Ancak bununla giderildi: veritabanınızın hemen yanına "? ServerTimezone =" + TimeZone.getDefault (). GetID () "eklenmesi sorunları çözer.
Tes

10

MaS bağımlılığında MySQL bağlayıcısını kullanabilirsiniz,

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

Sonra application.propertiesdosyada doğru parametreleri ayarlamanız gerekir ,

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

Ben kullanıyorum mysql-connector-java-8.0.13 ve aynı problem vardı. Veritabanımı komut satırı konsolunda oluşturdum ve bu sorunu komut satırında @Dimitry Rud'un çözümünü kullanarak çözdüm :

SET GLOBAL time_zone = '-6:00';

Ben hiçbir şey yeniden başlatmak gerek yoktu, zaman ayarlamak ve hemen tutulması kodumu çalıştırmak, hiçbir sorun ile bağlı.

Hata eski bir sürümünde düzeltilmesi gerekiyordu, ancak bence bu hatayı aldım çünkü veritabanını konsolda oluşturduktan sonra bunu ayarlamadım. Konsolu değil, bunu yönetmek için tezgah veya başka bir uygulama kullanmıyorum.


6

Mysql tezgahından aşağıdaki sql ifadelerini çalıştırın:

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

aşağıdaki sql ifadeleriyle değerlerin ayarlanıp ayarlanmadığını kontrol edin:

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


2
Bu, IntelliJ IDEA'dan bağlantı kurmaya çalışırken söz konusu hata ortaya çıktığında benim için çalıştı.
Faheem Hassan Zunjani

6

Bu benim için çalıştı.

6.0'da: Bağlantı Ayarları> Sürücü Özellikleri> Sunucu Saat Dilimi> UTC Ayarla'ya gidin.

Ayrıca, bahar önyükleme yapılandırma, özelliği ayarlamak zorunda kaldı.

jdbc: mysql: // localhost:? / serverTimezone = UTC


5

Görünüşe göre, MySQL JDBC sürücüsünün 5.1.33 sürümünün UTC saat dilimi ile çalışmasını sağlamak için, bağlantı dizesinde serverTimezone'u açıkça belirtmek gerekir.

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

3

Ayrıca LibreOffice Base'de aynı sorunu yaşıyordum. Bu yüzden sadece bağlantı dizesinde 'yaz saati uygulaması olmayan bir saat dilimi' belirledim.
** buraya resim açıklamasını girin **

"& ServerTimezone = MST" olmadan denedim ama bu da başarısız oldu.

Ben de "& serverTimezone = MDT" denedim ve bu başarısız oldu, bu yüzden bazı nedenlerden dolayı, yaz saati uygulaması sevmez!


3

Windows'da bahar önyükleme projesiyle çalışmaya çalıştığımda da aynı problemi yaşadım.

Veri kaynağı URL'si şöyle olmalıdır:

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


3

Hatayı gidermek için aşağıdaki sorguyu mysql DB'ye çalıştırın

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

i Seninkine benzer bir hata var ama benim sunucu saat dilimi değeri 'Afr. centrale Ouest 'Ben bu adımları yaptım:

MyError (IntelliJ IDEA Topluluk Sürümünde):

    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 sunucumu SQL Server 8.0'a (MYSQL80) yükselttiğimde bu sorunla karşılaştım.

Bu sorunun en basit çözümü MYSQL Workbench'inize aşağıdaki komutu yazmaktır -

  SET GLOBAL time_zone = '+1:00'

Saat diliminden sonraki değer, saat diliminizdeki GMT +/- Farkına eşit olacaktır. Yukarıdaki örnek Kuzey Afrika (GMT + 1: 00) / veya Hindistan (GMT + 5: 30) içindir. Sorunu çözecektir.

Mysql Workbench'inize aşağıdaki kodu girin ve sorgulamayı yürütün

[soru / problem için kaynak bağlantısı]

[cevap için kaynak bağlantısı]

[Çözüm ScreenShot]


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

Bu aslında bu sorunun çözümü, ancak sadece programınıza kopyalayıp yapıştırmayın. Satırı okuduysanız 'resultout' bulacaksınız, bu benim veritabanımın adı ve sizin yazmanız gerekir.

Üç dize bileşeni vardır, birincisi url, ikincisi kullanıcı adı ve üçüncüsü şifre. Yukarıdaki paragrafta temizledik, url. İkinci ve üçüncü Dize bileşenleri gibi kullanıcı adı ve şifre buna göre değiştirmek zorunda.

Teşekkürler


2

Sunucu saatini UTC olarak ayarlamanın bir etkisi yoktur (örneğin jdbc:mysql://localhost:3306/myschema?serverTimezone=UTC, uygulama / veritabanı sunucularınız bu saat diliminde olmasa bile.) Önemli olan uygulama bağlantı dizesi + veritabanının aynı saat dilimi ile senkronize edilmesidir.

Başka bir deyişle, serverTimezone=UTCveritabanı sunucusunda farklı bir saat dilimi ile ayarlamak, veritabanından ayıklanan tarihleri ​​değiştirecektir


1

Herhangi bir kod değişikliği yapmadan bu sorunu çözdüm. Sadece sistem saat ayarlarına gidin ve saat dilimini ayarlayın. Benim durumumda, varsayılan saat dilimi yerel saat dilimime değiştirdiğim UTC idi. Tüm hizmetleri yeniden başlattıktan sonra, her şey benim için çalıştı.


1

Geç kaldım, ancak aşağıdaki hata ile mücadele ve veri kaynağı (javax.sql.DataSource) kullanıyorsanız:

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

Hatadan kurtulmak için aşağıdaki satırı ayarlayın:

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

1

Benim durumumda, bir test ortamıydı ve herhangi bir yapılandırma değişikliği olmadan ve mümkünse MySQL yapılandırma değişiklikleri olmadan çalışmak için mevcut bir uygulamayı yapmak zorunda kaldım. @Vinnyjames önerisini izleyerek ve sunucu saat dilimini UTC olarak değiştirerek sorunu çözebildim :

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

Bunu yapmak sorunu çözmem için yeterliydi.


1

Aşağıdaki satırı dosyama ekledim /etc/mysql/my.cnf:

default_time_zone='+00:00'

MySQL sunucusu yeniden başlatıldı:

systemctl restart mysql

Ve bir cazibe gibi çalışıyor.


0

@Bluecollarcoder cevabını kabul edin, ancak TimeZone.getDefault().getID();bağlantı dizesinin sonunda kullanmak daha iyidir :

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

Bu durumda Timezoneparametre, yerel makine saat dilimine bağlı olarak otomatik olarak güncellenir.


Bu doğru değil. UseLegacyDatetimeCode = false noktasının serverTimezone öğesini belirtmesi gerekmez, böylece istemci saat dilimi farklılıklarını düzeltir.
antgar9

0

Sadece bağlantı dizesini application.properties dosyasında aşağıdaki kodla değiştirin.


spring.datasource.url=jdbc:mysql://localhost:3301/Db?
   useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=
   false&serverTimezone=UTC
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.