我在 Glassfish 3.0.1 应用程序服务器下使用运行在 Mac 操作系统上的 NetBeans 6.9.1 创建了一个 Web 服务。它的方法接受一个中文字符的 String arg。它将字符串插入到 MySQL 数据库表中。在 Debug模式下单步执行服务器代码时,字符正确到达。调试器观察显示下面带有中文字符的查询参数。
Query query = entityManager.createNativeQuery(QueryInsertWord);
query.setParameter(1, word);
query.executeUpdate();
但是,在插入时,数据库表列有 ???而不是汉字。我假设 MySQL 数据库是 UTF-8 兼容的,因为我可以使用 Navicat 数据库管理工具成功地将中文字符剪切并粘贴到同一列中。
PU 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="MyPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>javaapplication1.Registration</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/myDatabase"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="root"/>
</properties>
</persistence-unit>
</persistence>
我使用附加属性 useUnicode=true
和 characterEncoding=utf8
配置了所有 Glassfish jdbc 连接池。
请帮帮我。
最佳答案
问题至少出在两个地方:
- 您的连接未使用 utf-8。尝试使用连接字符串传递
characterEncoding=utf8
- 您的网络服务不接受 UTF-8(对于此处的操作,您必须提供更多信息)
还要确保您的数据库是utf_general_ci
(或类似的)
关于Glassfish 3.0.1 下的 Java Web 服务不将中文字符插入 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5058229/