一尘不染

UTF-8与JPA和Glassfish 4.0

hibernate

我在使用UTF-8字符时遇到困难。这是一个简单的JSF项目。我使用JSF 2.2和Glassfish 4.0

我有一个去的方法:

em.persist(user);

当我调试时

user.getName()

在这一点上,我可以在我的IDE中看到utf-8字符。我也将字符串保留在会话中-bean,我也可以在浏览器中看到它们。

仅当它们持久化到数据库时,它们才持久化为:????????

我也可以自己编辑数据库并保存utf-8字符。我的意思是,我的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" transaction-type="JTA">
        <jta-data-source>fus</jta-data-source>
        <class>com.tugay.fup.core.model.User</class>
        <properties>
            <property name="javax.persistence.jdbc.url"
                  value="jdbc:mysql://localhost:3306/fus?useUnicode=yes&amp;characterEncoding=UTF-8"/>
        </properties>
    </persistence-unit>
</persistence>

这是glassfish-web.xml:

<glassfish-web-app>
    <parameter-encoding default-charset="UTF-8"/>
</glassfish-web-app>

我正在使用由容器管理的EntityManager(事务类型= JTA)

因此,在Glassfish的JDBC连接池中,我有:

jdbc:mysql://localhost:3306/fus?useUnicode=true&connectionCollation=utf8_general_ci&characterSetResults=utf8

适用于:属性:URL …

但是这些都没有帮助。

静止字符不能正确保存。


阅读 318

收藏
2020-06-20

共1个答案

一尘不染

这解决了它:

jdbc:mysql:// localhost:3306 / fus?useUnicode = true&characterEncoding =
UTF-8&characterSetResults = UTF-8

所以这是错误的:

jdbc:mysql:// localhost:3306 / fus?useUnicode = true&connectionCollat​​ion =
utf8_general_ci&characterSetResults = utf8

2020-06-20