我在Java程序中的iseries中嵌入了sql查询,这引发了以下错误-
"[SQL0332] Character conversion between CCSID-id 1156 and 278 is not possible.".
我只用一个库而不是全部都面对这个问题。
工作查询:
select * from SRBKTO where KOACNO=721
不起作用的查询:
select * from SRBKTO where KOACNO= '721' (This works for other libraries)
如果我尝试使用带引号(字符串或整数类型)的条件子句来查询,则会引发错误。
我对iSeries并不了解。我了解到的是,字符
" ' "
(到目前为止,我只猜为该字符)从CCSID 1156到278的转换问题。我尝试了jt400native jar的java API com.ibm.as400.access.AS400.setCcsid(1156)将源CCSID设置为连接对象,这没有任何结果。
是否需要更改目标CCSID?任何人都可以提出解决此问题的方法吗?
最佳答案
如果使用DSPFFD显示KOACNO字段描述,则会发现代码页/字符集为1156(波罗的海)。您可以使用CAST为目标字符集转换查询中的字段。
从可用的库中检查什么是正确的CCSID。下面的强制转换示例(假设正确为1146):
select * from SRBKTO where CAST(KOACNO AS CHAR(20) CCSID 1146) = '721'