Oracle sqlldr导入乱码问题分析和解决

Oracle sqlldr导入乱码问题分析和解决

 

情况描述

  1. oracle 数据库字符集编码是:GBK的;
  2. 当前操作系统是linux redhat;
  3. 被导入的csv文件的字符集也是:GBK,文件换行符是unix格式;
  4. 使用sqlldr可以成功导入到表,但csv中字段有中文的在表中显示“?????”这种“乱码”。

 

情况分析

一般来说,脚本和导入文件没问题的话,多数是环境的问题,查了一下资料,跟当前执行导入脚本的账户的环境变量有关。

先查一下oracle的字符集:

 select name, value$ from sys.props$ where name like 'NLS%';

可知,语言是:

NLS_LANGUAGE    AMERICAN

NLS的全称是:National  Language  Support。

再查 一下,当前操作账户的语言和字符集环境:

echo $NLS_LANG

 

结果居然是空的!(不要怪我,系统不是我安装滴)

好吧。。。。

不废话了,我再查一下,GBK对应的NLS的设置应该是:AMERICAN_AMERICA.ZHS16GBK。

问题解决思路

问题原因找到了,根据经验要解决此问题,要么改当前账户的环境变量,要么改sqlldr的ctl文件,为了省事,我选择后者,ctl修改的片断如下:

Load data
CHARACTERSET ZHS16GBK  --即本行代码为设置字符集
INFILE 'TBL_SIS_PACKAGE.csv'
APPEND INTO TABLE TBL_SIS_PACKAGE

最后,再次执行sqlldr的脚本,数据正常入库且中文无乱码。

Good luck!

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值