Oracle 数据库导入数据和编码问题
配置 control 文件:
load data characterset utf8 append into table role_res_gold fields terminated by ';' TRAILING NULLCOLS ( F_USERNAME , F_RES_TYPE , F_INDEX , F_NAME , F_COUNT , F_GAIN_TYPE CONSTANT "aa", //CONSTANT 是关键字,用常量替换行里面内容 F_CONSUME_TYPE FILLER, // FILLER 关键字 此列的数值不会被装载 RECORD_DATE date "yyyy-mm-dd hh24:mi:ss" nullif (RECORD_DATE="null") )
导入命令
sqlldr userid=username/passwd@sid control=ctl.txt data=$file direct=true
特别说明:
control 文件里面配置的是源文件编码: characterset utf8
导入到数据库后,就是数据库的默认编码,不再是源文件编码!!!
查看 Oracle 编码:
select userenv('language') from dual;
例如:我的数据库是 SIMPLIFIED CHINESE_CHINA.ZHS16GBK,导入后字段内容的编码就变成了GBK
表装载的方法:
INSERT 这是缺省方法。该方法假设在数据装载前表是空的,如果在表中有记录,SQLLDR退出,并报:SQLLDR-601: FOR INSERT OPTION,TABLE MUST BE EMPTY,ERROR ON TABLE DEPT
APPEND 这种方法允许记录被添加到数据库表中,而且不影响已经存在的记录
REPLACE 这种方法首先删除表中已经存在的记录,然后开始装载新的记录。注意,当老记录被删除时,表上的任意删除触发器将被触发
TRUNCATE 这种方法在装载数据前,使用SQL命令TRUNCATE 删除老的记录,因为去除了触发器的触发并且没有创建回滚,所以这种方法要比REPLACE快得多。