oracle sqlldr无法识别特殊字符

时间:2017-09-29 07:19:58

标签: oracle sql-loader

我面临的情况是sqlldr无法识别特殊字符。我通常不会为此烦恼,因为对我而言,拥有完全相同的名称并不重要,但这会导致另一个导致系统出现故障的问题。

unittesting.txt

8888888,John SMITÉ,12345678

unittesting.ctl

load data
CHARACTERSET UTF8
infile 'PATH/unittesting.txt'
 INSERT
 into table temp_table_name
 Fields Terminated By ',' TRAILING NULLCOLS(
 ID_NO                 CHAR(50) "TRIM(:ID_NO)" ,
 NAME                  CHAR(50) "TRIM(:NAME)" ,
 ID_NO2                CHAR(50) "TRIM(:ID_NO2)" )

SQLLDR命令

sqlldr DB_ID/DB_PASS@TNS 
control=PATH/unittesting.ctl 
log=PATH/unittesting.log 
bad=PATH/unittesting.bad 
errors=100000000

表格输出

|ID_NO      |NAME                    |ID_NO2 |
|8888888    |John SMIT�12345678     |        |

有关系统[RHEL 7.2,Oracle 11G]

的其他信息
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

select userenv('language') from dual
OUTPUT: AMERICAN_AMERICA.AL32UTF8

file -i unittesting.txt
OUTPUT: unittesting.txt: text/plain; charset=iso-8859-1

echo $LANG
OUTPUT: en_US.UTF-8

修改

所以我尝试按照我的文件&的 [Cyrille MODIANO] 的建议更改编码用它。问题得到了解决。

 iconv -f iso-8859-1 -t UTF-8 unittesting.txt -o unittesting_out.txt

我现在面临的挑战是,我不知道传入文件的字符集。它来自不同的来源。我获取的源数据文件file -i的输出是:

: inode/x-empty; charset=binary

根据我的理解,charset = binary意味着字符集是未知的。请告知我在这种情况下可以做些什么。任何小的建议/想法都非常感激。

0 个答案:

没有答案