Java 未知的初始字符集索引';255';从服务器收到

Java 未知的初始字符集索引';255';从服务器收到,java,mysql,hibernate,Java,Mysql,Hibernate,在尝试创建HibernateSession期间,应用程序失败,出现异常: 原因:java.sql.SQLException:初始字符集索引未知 从服务器接收到“255”。可以强制初始客户端字符集 通过“characterEncoding”属性。在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)位于 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)

在尝试创建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服务器,因此无法更改其配置。 所以请注意,这不是重复的,因为建议的解决方案是为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
mysql连接器java
5.1.6
org.hibernate
冬眠核心
4.3.5.最终版本
org.testng
testng
6.9.12
测试

一些进一步的调查表明,问题恰恰在于MySQL v.8.0中所做的更改:

字符集支持

重要更改:默认字符集已更改 从拉丁文1改为utf8mb4。这些系统变量受到影响:

字符集和服务器的默认值 字符集数据库系统变量已从latin1更改为 utf8mb4

排序规则服务器的默认值,以及 排序规则\u数据库系统变量已从latin1\u swedish\u ci更改为utf8mb4\u 0900\u ai\u 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>

mysql
mysql连接器java
5.1.44

在连接Java 8客户端程序时,mysql 8.0.11版也遇到了同样的问题。作为解决方案,我从mysql官方网站下载了最新的连接器。下面我提到了链接:

选择平台无关作为操作系统并下载zip存档。在构建路径中添加可用的jar(作为外部jar添加)


希望这能解决您的问题:)

您需要这个连接器:连接器\J 5.1驱动程序


这是URL下方的兼容连接器,适合我

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

在hibernate.xml中键入此属性

<property name="hibernate.connection.characterEncoding">utf8</property>   
utf8
并将mysql连接器更新为

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

mysql
mysql连接器java
8.0.15

下面的更改对我起了作用

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

mysql
mysql连接器java
5.1.44
为了这个连接

    @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;
}
@Bean
@简介(“开发”)
公共数据源dataSourceDev(){
DriverManager数据源dataSource=新的DriverManager数据源();
dataSource.setUsername(“根”);
dataSource.setPassword(“密码”);
setUrl(“jdbc:mysql://localhost:3306/");
setDriverClassName(“com.mysql.jdbc.Driver”);
返回数据源;
}

要解决此问题,请更改驱动程序类名,如下所示 spring.datasource.driver类名=com.mysql.cj.jdbc.driver 这在mysql服务器8.0.16和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` 

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

这对我有用

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

对我有帮助的是在我的URL中添加以下内容:

useUnicode=true&character_set_server=utf8mb4&useLegacyDatetimeCode=false
这完全解决了问题。

使用以下url:-

url = "jdbc:mysql://localhost:3306/dbName?characterEncoding=latin1&useConfigs=maxPerformance","root","password" ```

(这篇文章似乎没有为这个问题提供答案。请编辑你的答案并加以改进,或者只是把它作为对这个问题的一个评论发布出来。)为我工作。谢谢不过,我只是在Windows10而不是Linux上使用MySql时才遇到这个问题。在Ubuntu上使用IntelliJ设置MySql的步骤与在Windows 10上不同。因此,在Windows 10中初始化MySql时,我错过了一些步骤。这对我来说很有效。我用的是5.1.6,改成了5.1.44。疯狂的东西