我面临的情况是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意味着字符集是未知的。请告知我在这种情况下可以做些什么。任何小的建议/想法都非常感激。