JPA utf-8字符没有保留

时间:2013-08-10 15:22:30

标签: jpa utf-8

我有一个简单的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>

4 个答案:

答案 0 :(得分:39)

在persistence.xml文件的属性中使用字符编码

<property name="javax.persistence.jdbc.url" 
   value="jdbc:mysql://localhost:3306/blogdatabase?useUnicode=yes&amp;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;