HibernateSessionアプリケーションを作成しようとすると、次の例外が発生して失敗します。
原因:Java.sql.SQLException:サーバーから不明な初期文字セットインデックス '255'を受信しました。 「characterEncoding」プロパティを使用して、初期クライアント文字セットを強制できます。 com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:1055)at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:956)at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:926) )
1つの解決策を見つけました ここ ですが、残念ながらDBサーバーにアクセスできないため、その構成を変更できません。 だから、これは重複ではないことに注意してください、DBサーバーの変更に対して提案された解決策が提供されたため、私の場合はそのようなアクセス権がありません。
クライアント側でこの問題を修正するチャンスはありますか?以下に、セッションを作成するpom.xmlファイルとJavaコードがあります。
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
return new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
// Close caches and connection pools
getSessionFactory().close();
}
}
そして、私のpom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd">
...
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-Java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.5.Final</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.9.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
いくつかのさらなる調査により、問題はMySQL v.8.0で行われた変更に正確にあったことが示されました。
文字セットのサポート
重要な変更:デフォルトの文字セットがlatin1からutf8mb4に変更されました。次のシステム変数が影響を受けます。
Character_set_serverおよびcharacter_set_databaseシステム変数のデフォルト値はlatin1からtf8mb4に変更されました。
Collation_serverおよびcollation_databaseシステム変数のデフォルト値がlatin1_swedish_ciからtf8mb4_0900_ai_ciに変更されました。
これらの変更はすべて、mysql-connector-Javaの新しいバージョンですでに処理されており、MySQLを構成する必要はありません。したがって、5.1.6
から5.1.44
に変更すると、問題が修正されます。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-Java</artifactId>
<version>5.1.44</version>
</dependency>
URLの下のユーザー、それは私のために働いています。
url=jdbc:mysql://localhost:3306/hybrisdb?characterEncoding=latin1&useConfigs=maxPerformance
それも私のために働く
jdbc:mysql:// localhost:3306/hybrisdb?characterEncoding = latin1&useConfigs = maxPerformance
この下の変更は私に働いた
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-Java</artifactId>
<version>5.1.44</version>
</dependency>
この接続のために
@Bean
@Profile("dev")
public DataSource dataSourceDev() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setUsername("root");
dataSource.setPassword("password");
dataSource.setUrl("jdbc:mysql://localhost:3306/<yourdatabasehere>");
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
return dataSource;
}
このコネクタが必要です:Connector\J 5.1ドライバー。
これは互換性のあるコネクタです
Java 8クライアントプログラムとの接続中に、mysqlバージョン8.0.11で同じ問題に直面しました。解決策として、mysqlの公式サイトから最新のコネクタをダウンロードしました。以下でリンクについて言及しました: https://dev.mysql.com/downloads/connector/j/
プラットフォームに依存しないオペレーティングシステムを選択し、Zipアーカイブをダウンロードします。ビルドパスに使用可能なjarを追加します(外部jarとして追加)。
これがあなたの問題を解決することを願っています:)
このプロパティをhibernate.xmlに入力します
<property name="hibernate.connection.characterEncoding">utf8</property>
mysqlコネクタを更新して
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-Java</artifactId>
<version>8.0.15</version>
</dependency>
この問題を解決するには、以下のようにドライバークラス名を変更してください。
`spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.jpa.hibernate.ddl-auto=create
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect`