【问题标题】:Problem while storing accented characters to the database using spring framework使用spring框架将重音字符存储到数据库时出现问题
【发布时间】:2011-08-28 15:10:04
【问题描述】:

我正在使用存储过程通过 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);

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

提前致谢, 纳兰

【问题讨论】:

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


    【解决方案1】:

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

    问题可能出在这一行

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

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

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

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

    编辑

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

    【讨论】:

    • 不幸的是 Types.NVARCHAR 不可用,只有 Types.LONGVARCHAR 在我的情况下没有多大用处。
    • Types.NVARCHAR 仅在 Java 1.6 中。可以升级吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 2010-11-09
    • 2011-04-01
    • 2016-02-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多