我在Java程序中嵌入了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)
如果我尝试使用带引号(String或int type)的条件子句来查询查询,则会抛出错误。
我对iSeries不了解。我的理解是,从CCSID 1156到278,字符" ' "
(截至目前我只猜测该字符)存在转换问题。
我尝试了jt400native jar的java API com.ibm.as400.access.AS400.setCcsid(1156),将源CCSID设置为没有产生任何结果的连接对象。 是否需要更改目标CCSID?任何人都可以建议一种解决方法吗?
答案 0 :(得分:0)
如果您使用DSPFFD显示KOACNO字段描述,您会发现codepage / charset是1156(波罗的海)。您可以使用CAST在查询中转换目标字符集的字段。
检查工作库中正确的CCSID是什么。下面的铸造示例(假设正确是1146):
select * from SRBKTO where CAST(KOACNO AS CHAR(20) CCSID 1146) = '721'
答案 1 :(得分:0)
问题是数据库表的CCSID与运行Java程序的作业的CCSID之间不兼容。
更改数据库表的CCSID以匹配作业
CHGPF FILE([LIBRARY]/[FILE]) CCSID(278)
或CHGPF FILE([LIBRARY]/[FILE]) CCSID(*HEX)
没有转化。
这似乎最有可能改变,正如你所说其他图书馆工作正常。
或者,要更改java程序的CCSID(如果以交互方式运行),则匹配数据库表
CHGJOB CCSID(1156)
或CHGJOB CCSID(*HEX)
没有转化