我是SQuirrel SQL新手。我需要一些帮助才能将CCSID 65535转换为ASCII,UNICODE(或任何人类可读的)
我按照以下guide使用JDBC驱动程序。
我的计划必须处理哪些字符转换问题? 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
答案 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 点击确定 填写您的用户凭据。 点击确定