1

我是松鼠 SQL 的新手。我需要一些帮助来将 CCSID 65535 翻译成 ASCII、UNICODE(或任何人类可读的)

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


根据IBM 的网站

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

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


我从我的 DB2 数据库中获得了以下信息

做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 c1 40 7e 40 c2 40 4e 40 c3 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40

应该翻译成如下内容:

*ADD                      A = B + C
4

3 回答 3

13

从 JDBC 常见问题解答:

为什么 Toolbox JDBC 将 EBCDIC 字符返回到我的 Java 程序?

通常,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 的末尾。

于 2011-11-24T17:46:28.740 回答
3

就我而言,这还不够,该文件包含波兰语字符并且 ccsid 为 65535。将行更改为“;translate binary=true;ccsid=870;”后 有效。

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

于 2014-04-15T05:30:39.823 回答
1

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

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

于 2018-11-27T20:30:51.457 回答