Syncsort读取Db2的decimal(9,8)、smallint列输出乱码如何解决
Syncsort读取Db2 decimal/smallint列输出乱码的Syncsort端解决方案
出现该问题的核心原因是Syncsort默认直接输出Db2返回的数值类型二进制编码,未做格式转译才会显示为不可读字符,无需修改SQL语句,可通过以下几种Syncsort端配置解决:
- 单作业数据源配置调整
打开当前作业的Db2数据源配置界面,开启数值类型隐式转换开关,单独指定两类字段的输出规则:- decimal(9,8)类型:设置输出格式为
1位整数+8位小数的通用数字格式,示例值2.98965467可直接正常输出 - smallint类型:设置输出格式为通用整数格式
- decimal(9,8)类型:设置输出格式为
- 主机JCL场景控制语句配置
如果你使用的是主机环境的Syncsort JCL作业,直接在SORT步骤的OUTREC控制语句中加转换参数即可,不需要改动查询SQL:- decimal列:添加参数
OUTREC FIELDS=(列起始位置,9,PD,TO=CHAR,EDIT=(TT.TTTTTTTT)),其中PD对应Db2 decimal的打包十进制编码,EDIT参数可按实际小数位数调整 - smallint列:添加参数
OUTREC FIELDS=(列起始位置,2,FI,TO=CHAR)
- decimal列:添加参数
- 全局类型映射配置(适用于所有Db2同步作业)
找到Syncsort安装目录下的类型映射配置文件db2types.xml,将decimal、smallint类型的默认输出规则修改为CHAR格式,保存后重启Syncsort服务即可,后续所有读取Db2的作业都会自动完成类型转译,无需逐个作业配置。
内容的提问来源于stack exchange,提问作者Sudarsan Rajagopalan
相关产品推荐
相关产品推荐

