場景:
業務部門要求匯入一批資料,是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...