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

发布于 2024-12-18 06:03:56 字数 1280 浏览 3 评论 0原文

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

我正在按照以下方式使用 JDBC 驱动程序 指南


根据 IBM 网站

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

但我认为他们指的是 CCSID 37 而不是 65535(十六进制)。


我从我的 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

I am new to SQuirrel SQL. I need some help to translating CCSID 65535 into ASCII, UNICODE (or anything human readable)

I am using the JDBC driver per the following guide.


According to IBM's website:

What character conversion issues must my program deal with? The IBM i
database uses EBCDIC to store text. Java uses Unicode. The JDBC driver
handles all conversion between character sets, so your program should
not have to worry about it.

but I think they refer to CCSID 37 and not 65535(Hex).


I have got the following info, from my DB2 DB

Doing DSPFD gives me:

Coded character set identifier . . . . . . : CCSID 65535

Doing DSPFFD gives me:

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

But the SQuirrel query result for the TXT field is:

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

Which should be translated to something like:

*ADD                      A = B + C

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

魄砕の薆 2024-12-25 06:03:56

来自 JDBC FAQ:

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

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

";translate binary=true"

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

From the JDBC FAQ:

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

Normally, the Toolbox JDBC driver will translate EBCDIC characters to Unicode Strings automatically. If it appears to be returning untranslated EBCDIC characters instead, then it is likely that the field in the IBM i database is tagged with CCSID 65535. The Toolbox JDBC driver recognizes this CCSID as a field that should not be translated. To avoid this behavior, tag fields on the IBM i that you want to be translated, with a valid CCSID. Alternately, you can set the "translate binary" connection property to "true", which instructs the JDBC driver to translate all fields, including those tagged with CCSID 65535. The easiest way to do this is to add

";translate binary=true"

to the end of the URL used when connecting to the database.

朮生 2024-12-25 06:03:56

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

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

In my case it was not sufficient enough, the file contained Polish characters and has a ccsid of 65535. After changing the line to ";translate binary=true;ccsid=870;" it worked.

Yet still one warning: if used within a join the ccsid is lost.

孤独陪着我 2024-12-25 06:03:56

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

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

I am using Squirrel to connect to an IBMi running 7.3. I had this same issue and was able to resolve by following these steps:

Right click on the Alias select Modify from the context menu (may want to create a copy and then modify that copy).
Click on the Properties button in the Change Alias xxxxx dialogue box.
Choose the Driver properties tab.
Select User driver properties
Scroll down the list of properties until you find translate binary.
Select the box on that row in the Specify column.
Click on the Value cell of that row and choose true
Click Ok
Fill in your user credentials.
Click Ok

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文