免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9554 | 回复: 1
打印 上一主题 下一主题

AS400转码问题解决方案 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-12 14:32 |只看该作者 |倒序浏览
数据文件如下:
TESTPF
AF CHAR 200 CCSID 37 ( 200A)
VALUE: '一堆简体中文加数字12345加字母abcde的值'

TESTPF2
AF CHAR 200 CCSID 935 (200O)

对TESTPF 在AS400上通过SQL,QRY读写均能正确识别为中文。
但通过TTO或者ODBC/JDBC下载时,将会被识别为乱码。

以往解决乱码问题时,往往是通过CHGPF命令,将TESTPF的AF字段修改为O型(CCSID 935)。或者创建一个TESTPF2,通过CPYF命令将TESTPF的内容拷贝到TESTPF2,通过FMTOPT(*NOCHK)参数自动转码来完成。当然也可以在JDBC中通过反射机制修改字段的CCSID值来自动转码。但以上方法都存在缺陷,要么需要对原始数据表进行修改,要么需要额外的存储空间,需要能创建新的PF或者修改PF的权限,要么只能定做转码方法(JDBC反射方法)。

现发现一个新的方法,直接通过SQL方式自动转码。方法如下:

SELECT CAST(AF AS CHAR(200) CCSID 935) FROM(
   SELECT CAST(AF AS CHAR(200) CCSID 65535) FROM TESTPF
   ) AS TESTPF

通过以上方法,就能将CCSID为37的字段的通过SQL方法转码为935并正确输出。

以上方法中如果去掉先将37转为65535的操作(CAST(AF AS CHAR(200) CCSID 65535))的话,转码出来的结果将不正确,会出现部分中文字符转码成功,部分失败的情况。

但如果通过先转为65535方法后再转为935,则能正确转换。

CAST的详细说明




详情见SQL reference


论坛徽章:
0
2 [报告]
发表于 2013-11-27 17:21 |只看该作者
帅! 楼主是个做技术的人!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP