如何从iseries上的DB2转换SQuirrel中的CCSID 65535

时间:2011-11-24 13:21:15

标签: jdbc db2 ibm-midrange squirrel-sql

我是SQuirrel SQL新手。我需要一些帮助才能将CCSID 65535转换为ASCII,UNICODE(或任何人类可读的)

我按照以下guide使用JDBC驱动程序。


根据IBM's website

  

我的计划必须处理哪些字符转换问题? IBM i   数据库使用EBCDIC来存储文本。 Java使用Unicode。 JDBC驱动程序   处理字符集之间的所有转换,因此您的程序应该   不必担心。

但我认为它们指的是CCSID 37而不是65535(Hex)。


我从DB2 DB获得以下信息

做DSPFD给了我:

  

编码字符集标识符。 。 。 。 。 。 :CCSID 65535

做DSPFFD给了我:

TXT     CHAR            3       3        41        Both     Text      
Field text  . . . . . . . . . . . . . . . :  Text   Coded Character
Set Identifier  . . . . . :  65535

但是TXT字段的SQuirrel查询结果是:

  

5c c1 c4 c4 40 40 40 40 40 40 40 40 40 40 40 40 40 40   40 40 40 40 40 40 40 40 c1 40 7e 40 c2 40 4e 40 c3 40   40 40 40 40 40 40 40 40 40 40 40 40 40 40

应将其翻译为:

*ADD                      A = B + C

3 个答案:

答案 0 :(得分:12)

来自JDBC FAQ:

Why is the Toolbox JDBC returning EBCDIC characters to my Java program?

通常,Toolbox JDBC驱动程序会自动将EBCDIC字符转换为Unicode字符串。如果它似乎是返回未翻译的EBCDIC字符,那么很可能IBM i数据库中的字段标记为CCSID 65535.Toolbox JDBC驱动程序将此CCSID识别为不应转换的字段。要避免此行为,请使用有效的CCSID标记要转换的IBM i上的字段。或者,您可以将“translate binary”连接属性设置为“true”,它指示JDBC驱动程序转换所有字段,包括标记为CCSID 65535的字段。最简单的方法是添加

";translate binary=true"

到连接数据库时使用的URL的末尾。

答案 1 :(得分:3)

在我的情况下,这还不够,该文件包含波兰字符,并且ccsid为65535.将行更改为&#34 ;; translate binary = true; ccsid = 870;"有效。

然而还有一个警告:如果在连接中使用,则ccsid会丢失。

答案 2 :(得分:1)

我正在使用Squirrel连接到运行7.3的IBMi。我遇到了同样的问题,可以按照以下步骤解决:

右键单击别名,从上下文菜单中选择“修改”(可能要创建副本,然后修改该副本)。 单击更改别名xxxxx对话框中的属性按钮。 选择驱动程序属性选项卡。 选择用户驱动程序属性 向下滚动属性列表,直到找到翻译二进制文件。 在“指定”列中选择该行上的框。 单击该行的“值”单元格,然后选择true 点击确定 填写您的用户凭据。 点击确定