我试图在UTF-8编码中保留一个实体。我使用以下配置
db.default.driver = com.mysql.jdbc.Driver
db.default.url = "jdbc:mysql://localhost:3306/db?characterEncoding=UTF-8"
db.default.user = ****
db.default.password = ****
db.default.jndiName = DefaultDS
我的持久性xml就像
<persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>DefaultDS</non-jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
<property name="hibernate.connection.useUnicode" value="true" />
<property name="hibernate.connection.characterEncoding" value="UTF-8" />
</properties>
</persistence-unit>
Ebean.save(entityList)给出
c.j.b.ConnectionHandle - Database access problem. Killing off this connection and all remaining connections in the connection pool. SQL State = HY000
a.a.OneForOneStrategy - java.sql.SQLException: Connection is closed!
javax.persistence.RollbackException: java.sql.SQLException: Connection is closed!
当entityList.size()大于某个特定数字时,例如15。
但是,当我从db url中删除?characterEncoding = UTF-8 部分时,一切正常,但我无法以正确的编码保存中文字符串。
我可以手动保存中文字符
答案 0 :(得分:0)
如果数据库配置为以UTF-8编码存储数据,那么您根本不必配置Hibernate。
Java String不需要编码。它是一个需要编码信息的byte [],以解释应该如何读取字节。
每当读取文件/套接字时,您需要知道编码,因为数据是逐字节的,因此您必须提供解码提示。
确保您的创建表包含编码:
CREATE TABLE MyTable (
ID INT UNSIGNED AUTO_INCREMENT,
PRIMARY KEY(ID)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8