我有一个简单的Web应用程序,我使用JPA。
我有一个名为 BlogEntry 的实体。
当我提交一个新的BlogEntry时,当我调试我的应用程序时,我看到utf8字符就好了。
例如
em.persist(entity);
在这一行中,如果我调试例如:
entity.getTitle()
我可以成功地在IDE中看到utf-8字符。 (如ğğ,或çç)
另外,我的数据库有UTF8排序规则,我可以使用像“INSERT INTO ...”这样的sql插入utf-8字符。
然而,对于JPA,字符被保留为????
为什么会这样?
问候。
这是我的persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="Persistence">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.tugay.blog.core.model.Blogentry</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/blogdatabase"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="aabbccdd"/>
</properties>
</persistence-unit>
</persistence>
答案 0 :(得分:39)
在persistence.xml文件的属性中使用字符编码
<property name="javax.persistence.jdbc.url"
value="jdbc:mysql://localhost:3306/blogdatabase?useUnicode=yes&characterEncoding=UTF-8"/>
答案 1 :(得分:14)
这有助于Spring Boot:
spring.datasource.url=jdbc:mysql://localhost:3306/securitydb?useUnicode=yes&characterEncoding=UTF-8
答案 2 :(得分:12)
这很好地解决了这个问题:
<property name="hibernate.connection.useUnicode" value="true" />
<property name="hibernate.connection.characterEncoding" value="UTF-8" />
编辑:使用hibernate 4.3.1,这可行:
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">utf-8</property>
答案 3 :(得分:0)
另一个常见的错误可能是数据库的编码错误。 如果您只是在没有正确编码的情况下检查了数据库,也可能导致此错误。 使用
create database mydb character set utf8 collate utf8_general_ci;
代替
create database mydb;