2015年8月25日火曜日

【PL/SQL】 CentOSにFTPアップロードしたCSVファイルの読み込み時にLENGTHがおかしくなる

 WindowsServerからFTPを利用してCentOSにアップロードしたCSVをCentOS上で動いているOracleのPL/SQLで扱う時に、UTL_FILE.GET_LINE() で取得した値を LENGTH() に放り込むと想定した文字数より1つ多く返ってくる。 どうも改行コードで変な事になっている気がする。
 とりあえずCentOSの文字コードの設定を疑ったりしたけれど、LFですよね…。

 少し前に開発環境のDBサーバーがAIXからCentOSに変わった為、本番環境で試しに同じ操作をしてみると問題なく動く。 ここでCentOSとAIXのサーバーにアップロードされたCSVファイルを見比べるとファイルサイズが異なっている。

 ・問題が発生するCentOSの方は改行コードがCRLF。
 ・正常に動作するAIXのの方は改行コードがLF。

 どうやら、アップロードする際に自動変換されるはずの改行コードが変換されず、CRLFのままアップロードされているのが幻忍の様子。 アップロードする際の設定でASCII設定をしていない? と思ったけれどしている。

 で、行き着いたのが、このページ様。


 CentOS標準のFTPサーバーらしいVSFTPDの設定で以下をコメントアウトしないとASCIIの設定が生きないらしい。

/etc/vsftpd/vsftpd.conf
ascii_upload_enable=YES
ascii_download_enable=YES

 上記をコメントアウトしたら問題なく動いた。

0 件のコメント:

コメントを投稿