web-dev-qa-db-ja.com

サーバーから受け取った不明な初期文字セットインデックス '255'

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> 
11
user9927978

いくつかのさらなる調査により、問題はMySQL v.8.0で行われた変更に正確にあったことが示されました。

文字セットのサポート

重要な変更:デフォルトの文字セットがlatin1からutf8mb4に変更されました。次のシステム変数が影響を受けます。

Character_set_serverおよびcharacter_set_databaseシステム変数のデフォルト値はlatin1からtf8mb4に変更されました。

Collat​​ion_serverおよびcollat​​ion_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>
33
user9927978

URLの下のユーザー、それは私のために働いています。

url=jdbc:mysql://localhost:3306/hybrisdb?characterEncoding=latin1&useConfigs=maxPerformance
9
Ashish Vyas

それも私のために働く

jdbc:mysql:// localhost:3306/hybrisdb?characterEncoding = latin1&useConfigs = maxPerformance

1
Uday Kumar

この下の変更は私に働いた

    <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;
}
0
José Junior

このコネクタが必要です:Connector\J 5.1ドライバー。

これは互換性のあるコネクタです

0
Ankur

Java 8クライアントプログラムとの接続中に、mysqlバージョン8.0.11で同じ問題に直面しました。解決策として、mysqlの公式サイトから最新のコネクタをダウンロードしました。以下でリンクについて言及しました: https://dev.mysql.com/downloads/connector/j/

プラットフォームに依存しないオペレーティングシステムを選択し、Zipアーカイブをダウンロードします。ビルドパスに使用可能なjarを追加します(外部jarとして追加)。

これがあなたの問題を解決することを願っています:)

0
Vivek Seth

このプロパティを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>
0
aly

この問題を解決するには、以下のようにドライバークラス名を変更してください。

`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` 
0
Asif Raza