Kor*_*gay 7 java mysql hibernate jpa glassfish
我在使用UTF-8字符时遇到困难.这是一个简单的JSF项目.我使用JSF 2.2和Glassfish 4.0
我有一个方法,我去:
em.persist(user);
Run Code Online (Sandbox Code Playgroud)
当我调试
user.getName()
Run Code Online (Sandbox Code Playgroud)
在这一点上,我可以在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&characterEncoding=UTF-8"/>
</properties>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
这是glassfish-web.xml:
<glassfish-web-app>
<parameter-encoding default-charset="UTF-8"/>
</glassfish-web-app>
Run Code Online (Sandbox Code Playgroud)
我正在使用由容器管理的EntityManager(事务类型= JTA)
所以在Glassfish的JDBC连接池中我有:
jdbc:mysql://localhost:3306/fus?useUnicode=true&connectionCollation=utf8_general_ci&characterSetResults=utf8
Run Code Online (Sandbox Code Playgroud)
for:property:URL ...
然而,这些都没有帮助.
仍然没有正确保留字符.
小智 11
使用Glassfish时,可以将这些属性设置为JDBC连接池的附加属性.在Web管理(资源 - > JDBC连接池 - > your.connection)中找到并查看数据库连接.在其他属性选项卡中添加(如果还没有)提到的属性并重新启动服务器:
//name, value
characterEncoding, UTF-8
characterSetResults, UTF-8
useUnicode, true
Run Code Online (Sandbox Code Playgroud)
如果将参数添加到URL,结果将是相同的,但在我看来,这是更易于维护的解决方案.
这解决了它:
JDBC:MySQL的://本地主机:3306/FUS了useUnicode =真的characterEncoding = UTF-8&characterSetResults = UTF-8
所以这是错的:
JDBC:MySQL的://本地主机:3306/FUS了useUnicode =真connectionCollation = utf8_general_ci&characterSetResults = UTF8
| 归档时间: |
|
| 查看次数: |
6843 次 |
| 最近记录: |