查看Oracle数据源编码:
执行:
SELECT Userenv('language') FROM dual;
结果:AMERICAN_AMERICA.US7ASCII
mysql 目标库 为utf-8
US7ASCII这个US7ASCII 到底是个神马字符集呢,我们知道其实 ascii是iso-8859-1的子集。那其实US7ASCII 也应该能够转化为iso-8859-1经过查资料与代码测试,当读取 oracle 字符集为 US7ASCII的时候,可以从数据中得到中文字符,然后以iso-8859-1 encode,再以gbk decode来正确显示中文。如果你要用程序处理可以这样去操作。但是我们目前的一个项目是用kettle来处理数据做ETL 的。kettle上处理oracle US7ASCII字符集有没有好的解决方案呢。答案是有的。废话少说,上教程:
本教程是从字符集为US7ASCII 的oracle 将数据迁移到字符集utf-8的mysql 上。其他请自行 尝试,直接以最简单的表输入,表输出为例子:
解决方式如图:
1 数据源允许简易转换 (重要,该选项及告诉kettle我们将自己转码,不需要它去适配)
2 中间加两个字段的选择,进行编码转化
完成!
如果是从US7ASCII 字符集的数据迁移到US7ASCII的数据库。将两个字段选择组件进行调换即可。(ps 这个目前为猜想,没有环境还没有测试)如有错误欢迎指正