SQLLDR导入乱码问题的解决
2012-08-17 16:50
204 查看
场景:
业务部门要求导入一批数据,是CSV格式的,大家就想到了EXCEL格式可以打开,但悲剧的是该批数据超过10万条,用EXCEL处理显然行不通,更悲剧的是打开直接就是乱码。于是笔者接了单子,筹划用SQLLDR进行导入。话说7年前做野村证券的BATCH系统时大量的使用了UNIX SHELL调用ORACLE SQLLDR功能,但若干年没用了居然对预防有些生疏。
处理过程:
1、本地建立控制文件
load data
infile 'd:\TMP_KAITOUSHUJU.csv'
into table TMP_KAITOUSHUJU
fields terminated by ','
(TRADE_CO,FULL_NAME,CUSTOMS_CODE,CO_CLASS,VALID_DATE,RG_DATE,ADDR_CO,BUSI_TYPE,CONTAC_CO,TEL_CO,LAW_MAN,LAW_MAN_TEL,CO_TYPE,BREAK_LAW_TIME1,BREAK_LAW_TIME2,INSPECT_TIME,COP_MODIFY_DATE)
2、WINDOWS下运用如下命令执行导入
sqlldr userid=test/test@PORTGB control=d:/TMP_KAITOUSHUJU.ctl log=d:/SQLLOAD.log
3、导入出错,提示部分列为空,查语法后改正控制文件如下
load data
infile 'd:\TMP_KAITOUSHUJU.csv'
into table TMP_KAITOUSHUJU
fields terminated by ','
trailing nullcols --将所有不在纪录中的指定位置的列当作空值
(TRADE_CO,FULL_NAME,CUSTOMS_CODE,CO_CLASS,VALID_DATE,RG_DATE,ADDR_CO,BUSI_TYPE,CONTAC_CO,TEL_CO,LAW_MAN,LAW_MAN_TEL,CO_TYPE,BREAK_LAW_TIME1,BREAK_LAW_TIME2,INSPECT_TIME,COP_MODIFY_DATE)
4、导入成功,但打开一看乱码
通过select * from v$nls_parameters; 查看NLS_CHARACTERSET为AL32UTF8,
而我本机是GBK,于是本机通过DOS窗口进行如下设置:
set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
同时更改控制文件如下:
load data
CHARACTERSET AL32UTF8
infile 'd:\TMP_KAITOUSHUJU.csv'
into table TMP_KAITOUSHUJU
fields terminated by ','
trailing nullcols --将所有不在纪录中的指定位置的列当作空值
(TRADE_CO,FULL_NAME,CUSTOMS_CODE,CO_CLASS,VALID_DATE,RG_DATE,ADDR_CO,BUSI_TYPE,CONTAC_CO,TEL_CO,LAW_MAN,LAW_MAN_TEL,CO_TYPE,BREAK_LAW_TIME1,BREAK_LAW_TIME2,INSPECT_TIME,COP_MODIFY_DATE)
业务部门要求导入一批数据,是CSV格式的,大家就想到了EXCEL格式可以打开,但悲剧的是该批数据超过10万条,用EXCEL处理显然行不通,更悲剧的是打开直接就是乱码。于是笔者接了单子,筹划用SQLLDR进行导入。话说7年前做野村证券的BATCH系统时大量的使用了UNIX SHELL调用ORACLE SQLLDR功能,但若干年没用了居然对预防有些生疏。
处理过程:
1、本地建立控制文件
load data
infile 'd:\TMP_KAITOUSHUJU.csv'
into table TMP_KAITOUSHUJU
fields terminated by ','
(TRADE_CO,FULL_NAME,CUSTOMS_CODE,CO_CLASS,VALID_DATE,RG_DATE,ADDR_CO,BUSI_TYPE,CONTAC_CO,TEL_CO,LAW_MAN,LAW_MAN_TEL,CO_TYPE,BREAK_LAW_TIME1,BREAK_LAW_TIME2,INSPECT_TIME,COP_MODIFY_DATE)
2、WINDOWS下运用如下命令执行导入
sqlldr userid=test/test@PORTGB control=d:/TMP_KAITOUSHUJU.ctl log=d:/SQLLOAD.log
3、导入出错,提示部分列为空,查语法后改正控制文件如下
load data
infile 'd:\TMP_KAITOUSHUJU.csv'
into table TMP_KAITOUSHUJU
fields terminated by ','
trailing nullcols --将所有不在纪录中的指定位置的列当作空值
(TRADE_CO,FULL_NAME,CUSTOMS_CODE,CO_CLASS,VALID_DATE,RG_DATE,ADDR_CO,BUSI_TYPE,CONTAC_CO,TEL_CO,LAW_MAN,LAW_MAN_TEL,CO_TYPE,BREAK_LAW_TIME1,BREAK_LAW_TIME2,INSPECT_TIME,COP_MODIFY_DATE)
4、导入成功,但打开一看乱码
通过select * from v$nls_parameters; 查看NLS_CHARACTERSET为AL32UTF8,
而我本机是GBK,于是本机通过DOS窗口进行如下设置:
set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
同时更改控制文件如下:
load data
CHARACTERSET AL32UTF8
infile 'd:\TMP_KAITOUSHUJU.csv'
into table TMP_KAITOUSHUJU
fields terminated by ','
trailing nullcols --将所有不在纪录中的指定位置的列当作空值
(TRADE_CO,FULL_NAME,CUSTOMS_CODE,CO_CLASS,VALID_DATE,RG_DATE,ADDR_CO,BUSI_TYPE,CONTAC_CO,TEL_CO,LAW_MAN,LAW_MAN_TEL,CO_TYPE,BREAK_LAW_TIME1,BREAK_LAW_TIME2,INSPECT_TIME,COP_MODIFY_DATE)
相关文章推荐
- SQLLDR导入乱码问题的解决
- SQLLDR导入乱码问题的解决
- [Cocos2D-X]使用iconv解决VS上中文显示乱码的问题+android导入第三方库iconv
- sql 导入数据库 出现乱码问题 解决办法 设置 --default-character-set=utf8
- 导入Android工程源码出现乱码问题的解决方法
- ZendStudio导入项目中文注释乱码问题解决
- 解决eclipse中导入项目中文乱码的问题
- Mysql 导入导出csv 中文乱码问题的解决方法
- 对于Mysql数据库导入SQL文件出现乱码问题的解决
- 解决C#中txt文档导入数据库时,中文显示乱码的问题
- leancloud后台导入cvs中文乱码问题解决办法
- pdm设计表完成之后导入Navicat数据库,字段注释乱码问题解决
- 解决mysql导入导出数据乱码问题
- 解决Eclipse导入别人工程时的中文乱码问题
- [导入]ASP.NET 2.0 解决中文乱码问题
- sqlldr 导入乱码,Oracle客户端字符集问题
- 解决source命令导入 带utf-8字符的.sql 产生乱码的问题
- 解决MyEclipse导入工程注释乱码问题
- myeclipse导入项目中的乱码问题的解决
- jsp中使用jstl导入html乱码问题解决方法