Java 未知的初始字符集索引';255';从服务器收到
在尝试创建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代码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)
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。疯狂的东西