使用jt400的AS400编码问题上的DB2

时间:2016-05-24 09:45:42

标签: java jdbc ibm-midrange jt400

我使用jt400从as400-db2上获取数据库中的数据。

我的数据库使用ccsid 37编码。 我只有抛光字母的问题。 如何强制jt400使用正确的编码?

我试过

jdbc:as400://MY_SYSTEM/LIBRARY;translate binary=true

AS400Text converer = new AS400Text(stringFromDb.length(), 37);
String stringAfterConversion = converter.toObject(stringFromDb.getBytes());

但它不起作用

2 个答案:

答案 0 :(得分:3)

CCSID 37是英文,不包含某些波兰语字符。波兰CCSID是1153,或870(没有欧元符号)。

您可以在此处查看CCSID 37(字符集697)中包含的符号:ftp://ftp.software.ibm.com/software/globalization/gcoc/attachments/CS00697.pdf

您可以在此处查看CCSID 1153(字符集1375)中包含的符号:ftp://ftp.software.ibm.com/software/globalization/gcoc/attachments/CS01375.pdf

如果数据库字段包含CCSID 37,则无法存储1153中缺少CCSID的字符。将转换常用字符。您可以尝试将数据库更改为使用UTF-16或CCSID 1200.它包含CCSID 37和CCSID 1153中的所有字符。

答案 1 :(得分:2)

如果设置正确,您不需要进行任何手动转换。 DB和JDBC驱动程序为您处理它。

您说您的数据库使用的是CCSID 37,这是美国,加拿大,荷兰,葡萄牙,巴西,新西兰,澳大利亚使用的英语。

要处理波兰语字符,您可能需要CCSID 870(每Language identifiers and associated default CCSIDs

但是,每列都分配了CCSID。因此,该表中该列中的所有内容都需要位于一个或另一个CCSID中。

如果您需要同时存储英语和在同一个表中的同一列中进行波兰语,然后最好的选择是将列更改为Unicode。

或者,您可以将数据标记为"二进制" CCSID 65535,以便系统不会尝试转换它。您需要translate binary=false,您的申请将负责了解哪些记录是英文的,哪些是波兰文。因此,您需要在记录中添加一些额外的标记字段。