7

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

我有一个方法:

em.persist(user);

当我调试

user.getName()

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

只有当它们被持久化到数据库时,它们才会被持久化为:?????

我也可以自己编辑数据库并保存 utf-8 字符。我的意思是,我的 SQL 配置适用于 UTF-8。

问题出在 JPA 中。

这是我尝试过的:(一起:)

持久性.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...

然而,这些都没有帮助。

仍然没有正确保留字符。

4

2 回答 2

12

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

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

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

于 2013-12-12T14:46:33.047 回答
7

这解决了它:

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

于 2013-10-04T21:44:45.833 回答