SQLLDR匯入亂碼問題的解決

2021-09-21 19:39:54 字數 1699 閱讀 7615

場景:

業務部門要求匯入一批資料,是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匯入亂碼問題的解決

處理過程 1 本地建立控制檔案 load data infile d tmp kaitoushuju.csv into table tmp kaitoushuju fields terminated by trade co,full name,customs code,co class,valid ...

SQLLDR匯入亂碼

需求將多個源系統的資料檔案匯入至資料庫中,正常使用sqlldr匯入後,發現其中乙個源系統的中文資料均為亂碼 最先考慮到的是匯入客戶端與資料庫編碼不一致,查詢表nls database parameters中nls characterset為zhs16gbk,與客戶端nls lang值一致,排除 下一...

解決mysql匯入匯出資料亂碼問題

2013 04 03 22 56 51 最近在linux上面用mysqldump匯出資料,放在windows系統中匯入就會出現中文亂碼,然後就會導致出現 unknown mysql server host和can t connect to the server的錯誤。最近在linux上面用mysql...