【问题标题】:JPA utf-8 characters not persistedJPA utf-8 字符未保留
【发布时间】:2013-08-10 15:22:29
【问题描述】:

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

我有一个名为 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>

【问题讨论】:

    标签: jpa utf-8


    【解决方案1】:

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

    <property name="javax.persistence.jdbc.url" 
       value="jdbc:mysql://localhost:3306/blogdatabase?useUnicode=yes&amp;characterEncoding=UTF-8"/>
    

    【讨论】:

    • 记得转义任何特殊字符,如下:spring.datasource.url=jdbc\:mysql\://localhost\:3306/blogdatabase\?useUnicode=true\&amp;characterEncoding=utf\-8\&amp;characterSetResults=utf\-8
    【解决方案2】:

    这有助于 Spring Boot:

    spring.datasource.url=jdbc:mysql://localhost:3306/securitydb?useUnicode=yes&characterEncoding=UTF-8
    

    【讨论】:

      【解决方案3】:

      这很好地解决了它:

      <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>
      

      【讨论】:

        【解决方案4】:

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

        create database mydb character set utf8 collate utf8_general_ci;
        

        而不是

        create database mydb;
        

        【讨论】:

          猜你喜欢
          • 2013-07-17
          • 2019-08-08
          • 2011-06-15
          • 2018-02-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多