我在使用 UTF-8 字符时遇到困难。这是一个简单的 JSF 项目。我使用 JSF 2.2 和 Glassfish 4.0
我有一个方法:
em.persist(user);
调试时
user.getName()
此时,我可以在我的 IDE 中看到 utf-8 字符。此外,我将字符串保存在 session bean 中,我也可以在浏览器上看到它们。
只有持久化到DB时,才持久化为:??????
我也可以自己编辑数据库并保存 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&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...
但是这些都没有帮助。
静态字符未正确保留。
最佳答案
使用 Glassfish 时,您可以将这些属性设置为 JDBC 连接池的附加属性。在 Web 管理中找到并查看您的数据库连接(Resources->JDBC Connection Pools->your.connection)。在其他属性选项卡中添加(如果还没有)提到的属性并重新启动您的服务器:
//name, value
characterEncoding, UTF-8
characterSetResults, UTF-8
useUnicode, true
如果将参数添加到 URL,结果将是相同的,但我认为这是更易于维护的解决方案。
关于java - UTF-8 与 JPA 和 Glassfish 4.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19189721/