在尝试创建HibernateSession应用程序期间失败,但出现以下异常:
原因:java.sql.SQLException:从服务器接收到未知的初始字符集索引‘255’。可以通过’characterEncoding’属性强制设置初始客户端字符集。在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) )
我在这里找到了一种可能的解决方案,但是很遗憾,我无法访问数据库服务器,因此无法更改其配置。 因此请注意,这不是重复的,因为为数据库服务器的更改提供了建议的解决方案,在我的情况下,我没有这种访问权限。
有机会在客户端解决此问题吗?在下面,您可以找到我创建会话的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 v.8.0中所做的更改:
字符集支持 重要更改:默认字符集已从latin1更改为utf8mb4。这些系统变量会受到影响: character_set_server和character_set_database系统变量的默认值已从 latin1 更改为 utf8mb4 。 在collation_server的和collation_database查看系统变量的缺省值已经从 latin1_swedish_ci 到 utf8mb4_0900_ai_ci 。
字符集支持
重要更改:默认字符集已从latin1更改为utf8mb4。这些系统变量会受到影响:
character_set_server和character_set_database系统变量的默认值已从 latin1 更改为 utf8mb4 。
在collation_server的和collation_database查看系统变量的缺省值已经从 latin1_swedish_ci 到 utf8mb4_0900_ai_ci 。
所有这些更改已在新版本的mysql-connector-java中处理,因此无需配置MySQL。因此,请从更改5.1.6为5.1.44解决此问题:
5.1.6
5.1.44
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.44</version> </dependency>