我正在使用存储过程使用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,它会正确保存。我不知道我哪里错了。请帮忙。
提前致谢, 纳拉因
答案 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会不会让你这么做。