从服务器接收到未知的初始字符集索引“255”

bpsygsoo  于 2021-06-21  发布在  Mysql
关注(0)|答案(10)|浏览(380)

在尝试创建hibernatesession期间,应用程序失败,出现异常:
原因:java.sql.sqlexception:从服务器接收到未知的初始字符集索引“255”。可以通过“characterencoding”属性强制初始客户端字符集。在com.mysql.jdbc.sqlerror.createsqlexception(sqlerror。java:1055)在com.mysql.jdbc.sqlerror.createsqlexception(sqlerror。java:956)在com.mysql.jdbc.sqlerror.createsqlexception(sqlerror。java:926)
我在这里找到了一个可能的解决方案,但不幸的是,我无法访问db server,因此无法更改其配置。所以请注意,这不是一个重复,因为建议的解决方案提供了数据库服务器的变化,在我的情况下,我没有这样的访问。
有机会在客户端解决这个问题吗?下面您可以找到我创建会话的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>
yebdmbv4

yebdmbv41#

要解决这个问题,请更改驱动程序类名,如下所示:spring.datasource.driver class name=com.mysql.cj.jdbc.driver在mysql server 8.0.16和mysql connector 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`
t0ybt7op

t0ybt7op2#

在连接java8客户端程序时,mysql版本8.0.11也遇到了同样的问题。作为解决方案,我从mysql官方网站下载了最新的连接器。下面我提到了链接:https://dev.mysql.com/downloads/connector/j/
选择平台无关作为操作系统并下载zip存档文件。在构建路径中添加可用的jar(作为外部jar添加)。
希望这能解决你的问题:)

20jt8wwn

20jt8wwn3#

一些进一步的调查显示,这个问题正是mysql v.8.0中所做的更改:
字符集支持
重要更改:默认字符集已从latin1更改为utf8mb4。这些系统变量受到影响:
character_set_server和character_set_数据库系统变量的默认值已从latin1更改为utf8mb4。
collation_server和collation_数据库系统变量的默认值已从latin1_swedish_ci更改为utf8mb4_0900_ai_ci。
所有这些更改都已经在新版本的mysql-connector-java中处理,不需要配置mysql。所以从 5.1.65.1.44 解决问题:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.44</version>
</dependency>
xdyibdwo

xdyibdwo4#

对我有帮助的是将此附加到我的url:

useUnicode=true&character_set_server=utf8mb4&useLegacyDatetimeCode=false

这完全解决了这个问题。

yws3nbqq

yws3nbqq5#

您需要这个连接器:连接器\j 5.1驱动程序。
这是兼容的连接器

xeufq47z

xeufq47z6#

面临着同样的问题。。所以我更新了连接器版本(8.0.18)并解决了这个问题。

olqngx59

olqngx597#

这对我有用!

<property name="JDBC.ConnectionURL"  value="jdbc:mysql://localhost:3306/empdemo?characterEncoding=utf8"></property>
emeijp43

emeijp438#

用户低于网址,它为我工作。

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

yzuktlbb9#

在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>
at0kjp5o

at0kjp5o10#

这一变化对我起了作用

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

相关问题