使用spring框架将重音字符存储到数据库时出现问题

时间:2011-05-19 06:51:07

标签: java sql-server-2005 spring stored-procedures non-ascii-characters

我正在使用存储过程使用Spring Framework的存储过程类将一些数据插入SQL 2005 DB。类声明有点像:

       private class InsertShippingAddress extends StoredProcedure {
    public InsertShippingAddress(final DataSource ds) {
      super(ds, "usp_adiPromoInsertShippingDetail");
      super.declareParameter(new SqlParameter("in_FirstName", Types.VARCHAR));

      compile();
    }
  }

我正在执行SP:

     final InsertShippingAddress insertShippingAddress = new InsertShippingAddress(
            getJdbcTemplate().getDataSource());
    final Map<String, Object> inParams = new HashMap<String, Object>();
    inParams.put("in_FirstName", name);
   insertShippingAddress.execute(inParams);

现在的问题是,法语字符串中包含重音字符的名称字符串,但是在存储时,字符串èüÀÔàé以失真的方式存储为e u¨A O ^ a`e'。但是,如果我真的通过SQL管理工作室执行SP,它会正确保存。我不知道我哪里错了。请帮忙。

提前致谢, 纳拉因

1 个答案:

答案 0 :(得分:0)

免责声明:我不是java程序员

问题可能出在这一行

  super.declareParameter(new SqlParameter("in_FirstName", Types.VARCHAR));

由于您使用的是VARCHAR类型,因此可能无法正确转换非ASCII字符。

也许您应该使用以下内容?

  super.declareParameter(new SqlParameter("in_FirstName", Types.NVARCHAR));

修改

如果你不能使用NVARCHAR类型,一个解决办法可能是将字符串转换为十六进制,然后将其作为Types.VARBINARY(或类似的东西)传递给数据库 - 数据库应该正确处理类型转换。我不知道Spring会不会让你这么做。