ale*_*x.p 3 java oracle jdbc spring-jdbc
我使用JDBCTemplate调用oracle存储过程,它具有STRUCT的输入/输出参数.此结构上的一个字段是VARCHAR,它根据存储过程逻辑进行更新.但是当从调用返回时它只包含三个问号 - '???'.这可能是Riddler的工作,但听起来更像是char编码问题.
这工作正常,直到我们将数据库切换到具有WE8ISO8859P15(ISO8859)字符编码的数据库,这是通过执行以下操作检索的:
SELECT NLS_CHARACTERSET FROM NLS_DATABASE_PARAMETERS
Run Code Online (Sandbox Code Playgroud)
以前工作的字符集是WE8MSWIN1252(MSWIN-1252),它工作正常.所以我猜这是一个字符集问题,虽然我有点小心,因为它总是只返回3个问号,无论应该返回多少文本.
据我所知,底层的JDBC驱动程序(jdbc:oracle:thin)会自动执行所有字符编码,并将数据库字符集转换为UTF-16(Java字符编码)但是看起来没有发生这种情况.我正在使用StoredProcedure类(Spring的一部分)来调用StoredProcedure.
我也尝试将orai18n.jar添加到类路径中,但没有成功.然而,考虑到ISO-8859是一个非常标准的字符集似乎很不寻常,所以我可能会走错路.
任何帮助将不胜感激.
由于数据库字符编码存储为ISO-8859-15,这是一个字符编码问题- 此标准的第15版引起了所有问题,这些问题基本上是添加了欧元符号.我们用于通过JDBC连接的oracle驱动程序根本无法进行从ISO-8859-15到Java的UTF-16的转换.
恢复到ISO-8859-1或在数据库上更改为UTF-8编码(更好)解决了这个问题.将orai18n jar添加到类路径中可能会解决这个问题,但由于没有现成的OSGI包,所以它并不容易.我的建议是根本不打扰Oracle数据库.
| 归档时间: |
|
| 查看次数: |
3463 次 |
| 最近记录: |