我在使用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&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 …
但是这些都没有帮助。
静止字符不能正确保存。
这解决了它:
jdbc:mysql:// localhost:3306 / fus?useUnicode = true&characterEncoding = UTF-8&characterSetResults = UTF-8
所以这是错误的:
jdbc:mysql:// localhost:3306 / fus?useUnicode = true&connectionCollation = utf8_general_ci&characterSetResults = utf8