web-dev-qa-db-fra.com

Index de jeu de caractères initial inconnu '255' reçu du serveur

Lors d'une tentative de création d'une application HibernateSession, échec avec une exception:

Causé par: Java.sql.SQLException: l'index '255' du jeu de caractères initial inconnu a été reçu du serveur. Le jeu de caractères client initial peut être forcé via la propriété 'characterEncoding'. à com.mysql.jdbc.SQLError.createSQLException (SQLError.Java:1055) à com.mysql.jdbc.SqLError.createSQLException (SQLError.Java:106) à com.mysql.jdbc.SQL )

J'ai trouvé une solution possible ici mais malheureusement, je n'ai pas accès au serveur de base de données, je ne peux donc pas modifier sa configuration. Veuillez donc faire attention à ce qu'il ne s'agit pas d'un doublon, car la solution suggérée a été fournie pour les modifications du serveur de base de données et, dans mon cas, je n'ai pas cet accès.

Est-ce une chance de résoudre ce problème côté client? Ci-dessous, vous trouverez mon fichier pom.xml et Java où je crée une session.

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();
    }
}

Et mon 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

Des investigations plus poussées ont montré que le problème était précisément lié aux modifications apportées dans MySQL v.8.0:

Prise en charge du jeu de caractères

Changement important: le jeu de caractères par défaut est passé de latin1 à utf8mb4. Ces variables système sont affectées:

La valeur par défaut des variables système character_set_server et character_set_database est passée de latin1 à tf8mb4.

La valeur par défaut des variables système collation_server et collation_database est passée de latin1_swedish_ci à tf8mb4_0900_ai_ci.

Toutes ces modifications ont déjà été traitées dans la nouvelle version de mysql-connector-Java et il n’est pas nécessaire de configurer votre MySQL. Alors changez de 5.1.6 à 5.1.44 résoudre le problème:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-Java</artifactId>
    <version>5.1.44</version>
</dependency>
33
user9927978

Utilisateur ci-dessous URL, cela fonctionne pour moi.

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

Ça marche aussi pour moi

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

1
Uday Kumar

Ce changement ci-dessous a fonctionné pour moi

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-Java</artifactId>
        <version>5.1.44</version>
    </dependency>

pour cette connexion

    @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

Vous avez besoin de ce connecteur: Connector\J 5.1 driver.

C'est le connecteur compatible

0
Ankur

J'ai rencontré le même problème pour la version 8.0.11 de MySQL lors de la connexion avec le programme client Java 8. Comme solution, j'ai téléchargé le dernier connecteur du site officiel de mysql.Below j'ai mentionné le lien: - https://dev.mysql.com/downloads/connector/j/

Choisissez Platform independent comme système d'exploitation et téléchargez l'archive Zip.Ajoutez le fichier jar disponible à votre chemin de génération (ajoutez-le en tant que fichier jar externe).

J'espère que cela résoudrait votre problème :)

0
Vivek Seth

tapez cette propriété dans votre hibernate.xml

<property name="hibernate.connection.characterEncoding">utf8</property>   

et mettez à jour votre connecteur mysql

 <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-Java</artifactId>
    <version>8.0.15</version>
</dependency>
0
aly

pour résoudre ce problème, changez le nom de la classe de pilote comme indiqué ci-dessous spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver cela fonctionne très bien pour moi dans mysql server 8.0.16 et le connecteur mysql 8.0.16

`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