繁体   English   中英

UTF - 8与JPA和Glassfish 4.0

[英]UTF - 8 with JPA and Glassfish 4.0

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

我有一个方法,我去:

em.persist(user);

当我调试

user.getName()

在这一点上,我可以在IDE中看到utf-8字符。 此外,我将字符串保存在session-bean中,我也可以在浏览器上看到它们。

只有当它们被持久化为DB时,它们才会被坚持为:?????

我也可以自己编辑DB并保存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

for:property:URL ...

然而,这些都没有帮助。

仍然没有正确保留字符。

使用Glassfish时,可以将这些属性设置为JDBC连接池的附加属性。 在Web管理(资源 - > JDBC连接池 - > your.connection)中找到并查看数据库连接。 在其他属性选项卡中添加(如果还没有)提到的属性并重新启动服务器:

//name, value
characterEncoding, UTF-8
characterSetResults, UTF-8
useUnicode, true

如果将参数添加到URL,结果将是相同的,但在我看来,这是更易于维护的解决方案。

这解决了它:

JDBC:MySQL的://本地主机:3306 / FUS了useUnicode =真的characterEncoding = UTF-8&characterSetResults = UTF-8

所以这是错的:

JDBC:MySQL的://本地主机:3306 / FUS了useUnicode =真connectionCollat​​ion = utf8_general_ci&characterSetResults = UTF8

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM