20

我有一个使用 JPA 的简单 Web 应用程序。

我有一个名为BlogEntry的实体。

当我提交一个新的 BlogEntry 时,当我调试我的应用程序时,我看到 utf8 字符就好了。

例如

em.persist(entity);

在这一行中,如果我调试例如:

entity.getTitle()

我可以在 IDE 中成功看到 utf-8 字符。(如 ğ 或 çç )

另外,我的数据库有 UTF8 排序规则,我可以使用 sql 插入 utf-8 字符就好了,比如“INSERT INTO ...”

但是,使用 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

4 回答 4

43

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

<property name="javax.persistence.jdbc.url" 
   value="jdbc:mysql://localhost:3306/blogdatabase?useUnicode=yes&amp;characterEncoding=UTF-8"/>
于 2013-08-11T04:19:31.627 回答
18

这有助于 Spring Boot:

spring.datasource.url=jdbc:mysql://localhost:3306/securitydb?useUnicode=yes&characterEncoding=UTF-8
于 2015-09-14T21:31:39.123 回答
13

这很好地解决了它:

<property name="hibernate.connection.useUnicode" value="true" />
<property name="hibernate.connection.characterEncoding" value="UTF-8" />

编辑:使用休眠 4.3.1 这有效:

<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">utf-8</property>
于 2013-08-11T05:21:43.293 回答
0

另一个常见的错误可能是数据库的错误编码。如果您只是在没有正确编码的情况下创建了数据库,则此错误也可能是结果。采用

create database mydb character set utf8 collate utf8_general_ci;

代替

create database mydb;
于 2020-03-07T20:08:41.943 回答