Glassfish 3.0.1 下的 Java Web 服务不将中文字符插入 MySQL 数据库

标签 java mysql web-services glassfish-3 cjk

我在 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=truecharacterEncoding=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/

相关文章:

java - 更改字段值时的 HashSet 行为

java - 为什么这个PreparedStatement会抛出mysql错误?

java - 如何在 SQL Wrapper 类中返回 ResultSet

c# - 添加服务引用会生成空的 reference.cs 和空的 config.svcinfo 文件

wcf - 从 WCF 服务返回原始 XML

java - 在 HTTP 请求 header 中插入用户凭据

java - Spring Boot 添加 Http 请求拦截器

java - 用于在 Java 中操作视频的库/教程

mysql - MySQL 转储的完整数据库重置?

php - 使用 Zend TableGateway 的 select() 时无法检索 id 值