You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Squirrel SQL查询DB2成员文件返回十六进制值问题

DB2成员文件查询返回十六进制值而非可读文本的问题

我通过Squirrel SQL客户端的ODBC驱动连接DB2数据库,提取普通表数据正常,但提取成员文件数据时出现异常:已为成员创建别名并执行查询,返回结果全是十六进制值,和RDi(Rational Developer for i)中显示的ASCII内容不符,将这些十六进制复制到翻译工具仅得到特殊字符。

执行的SQL语句:

CREATE ALIAS MFXFER.I316_E157324133 FOR MFXFER.GIK316BKP ("E157324133");

SELECT * FROM MFXFER.I316_E157324133;

DROP ALIAS IF EXISTS MFXFER.I316_E157324133;

返回的十六进制值片段:

2  f1  f0  40  40  40  40  40  40  40  40  40  40  40  f8  f6  f2  f0  f2  f3  f0  f6  f0  f6  f0  f1  f0  f0  f0  f0  f0  f1  f0  f1  f1  f2  f6  f4  f5  f3  f6  40  40  40  40  40  40  40  40  e5  d6  60  c2  f3  60  f0  f2  f4  40  40  40  40  40  40  40  f2  f0  f2  f3  f0  f6  f0  f6  40  40  40  40  e2  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40  40

问题原因及解决方法

原因

返回的十六进制是IBM i系统默认的EBCDIC编码字节,RDi会自动完成EBCDIC到ASCII的转换,而你的Squirrel SQL ODBC连接未配置编码转换,直接返回了原始字节数据。

解决办法

  1. 配置ODBC驱动的自动编码转换
    打开ODBC数据源管理器,找到对应的DB2数据源:

    • 进入配置界面,开启EBCDIC到ASCII/UTF-8的编码转换选项
    • 选择目标编码(如UTF-8对应CCSID 1208,Windows ANSI对应CCSID 1252)
  2. 在SQL中手动转换编码
    如果无法修改ODBC配置,可使用DB2内置函数转换字段编码:

    -- 将字段转换为UTF-8编码的可读字符串
    SELECT CAST(your_column_name AS VARCHAR(255) CCSID 1208)
    FROM MFXFER.I316_E157324133;
    

    替换your_column_name为实际字段名,调整长度匹配你的数据。

  3. 检查Squirrel SQL的显示设置
    打开Squirrel SQL偏好设置,找到「数据类型显示」相关选项,确保字符串类型字段未被设置为十六进制显示模式。

内容的提问来源于stack exchange,提问作者DuaneRRR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:54:55