SQLLDR匯入亂碼

2021-08-25 05:43:52 字數 706 閱讀 6570

需求將多個源系統的資料檔案匯入至資料庫中,正常使用sqlldr匯入後,發現其中乙個源系統的中文資料均為亂碼

最先考慮到的是匯入客戶端與資料庫編碼不一致,查詢表nls_database_parameters中nls_characterset為zhs16gbk,與客戶端nls_lang值一致,排除

下一步懷疑檔案編碼問題,在xshell中cat資料檔案,發現資料檔案中的中文全部為亂碼,更改xshell的編碼為utf-8,再cat後發現亂碼變為中文,確認問題的原因是資料檔案的編碼為utf-8,與資料庫編碼不同。

可使用file -i filename 命令查詢檔案編碼(linux)

解決方法

使用iconv命令轉換資料檔案編碼,伺服器是aix,執行後報錯,cannot open converter,切換至root使用者依舊報錯,百思不得其解,將資料檔案移至linux伺服器,使用命令iconv -f utf-8 -t gbk filename > newfilename 轉換成功,轉移檔案至aix伺服器,使用cat命令檢視,正常,使用sqlldr匯入資料庫後,無亂碼,解決。

問題後續

經過iconv轉換後,發現出現資料丟失的問題,比如,原來500多萬條資料的檔案,經過轉換後只剩1萬多條,懷疑是由於iconv命令遇到無法轉化的字元時丟失,查詢幫助文件加入-s引數

iconv -f utf-8 -t gbk -s inputfile -o outputfile

解決

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匯入亂碼問題的解決

場景 業務部門要求匯入一批資料,是csv格式的,大家就想到了excel格式可以開啟,但悲劇的是該批資料超過10萬條,用excel處理顯然行不通,更悲劇的是開啟直接就是亂碼。於是筆者接了單子,籌畫用sqlldr進行匯入。話說7年前做野村 的batch系統時大量的使用了unix shell呼叫oracl...

sqlldr匯入資料

先編寫乙個控制檔案control1.ctl 內容如下 load data infile place.csv fields terminated by phone,place 解釋如下 第一行表示載入資料 第二行表示載入的資料名稱為place.csv檔案 第三行表示加入到表kel.place中 第四行...