日本語ラベル・値のCSVファイルをSQLで読み取りたい! CData CSV Driver でエンコーディングを指定する方法

こんにちは。CData Software Japan リードエンジニアの杉本です。

CData Driver のラインナップの中でも、結構ユーザーニーズが多いCSV Driverについて、Tipsをお伝えしたいと思います。

皆さんもご存知の通り、CSVは結構仕様上のゆらぎが多く、連携プログラム開発でも地味に悩まれる方が多いのではないかなーと思います。

f:id:sugimomoto:20190107145159p:plain

https://www.cdata.com/jp/drivers/csv/odbc/

CData CSV Driver では、そんなCSV ファイルの読み取りに対して、様々な接続プロパティを提供することで、柔軟に読み取りができるようにサポートしています。

そんな CSV Driver で最近日本語のカラム・値が入っているものをうまく読み取りたいのだけど、どうすればいいでしょうか? といったお問い合わせがありましたので、今回はその解決方法をご紹介したいと思います。

対象のファイル

対象のファイルは内閣府の「国民の祝日について」でダウンロードできるCSVです。

国民の祝日について - 内閣府

以下のような感じで、ダブルクオーテーション無し、カンマ区切り、かつ日本語ラベル

エンコーディングがS-JIS形式のファイルでした。

f:id:sugimomoto:20190107143229p:plain

これを素直にCData CSV Driver(画面はJDBCで接続している時のもの)で読み取ろうとすると、以下のようにCData CSV Driver がカラム構成を識別できずエラーになってしまいます。

f:id:sugimomoto:20190107144545p:plain

# 解決方法

実は隠しプロパティとして提供されている「charset=Shift-JIS」を設定してもらうことで、対応することが可能です。

JDBC で接続する場合は以下のように設定できますし

jdbc:csv:Data Source=C:\Testdata\CSV\syukujitsu_download.csv;charset=Shift-JIS;

Excel Add-in や ODBC Driverで接続する場合は、Otherというところに、このプロパティを指定することで解決できます。

f:id:sugimomoto:20190107143430p:plain

これで、正常に取得できるようになります。

f:id:sugimomoto:20190107143916p:plain

余談ですがCData CSV Driver であれば、以下のようにCSVに対してWhere Like検索みたいなことも実施可能です。

f:id:sugimomoto:20190107144005p:plain

また、エンバカデロ・テクノロジーズの井之上さんにも「Delphi / C++Builder」でCSVを扱う方法として、Enterprise Connectors CSV Component を以下のBlogでご紹介頂いています!

f:id:sugimomoto:20190121223541p:plain

Delphi / C++Builder でCSVファイルをスマートに使う

CSVは様々なアプリケーションから扱うシチュエーションが多いと思いますので、是非参考にしてみてください!

おわりに

上記以外にもCSV Driverは様々な機能をサポートしています。

TAB区切りやInsert・Updateの方法などもありますので、検討や試用している中で不明な点があれば、お気軽にサポートフォームまでお問い合わせいただければと思います。

CData テクニカルサポート URL

https://www.cdata.com/jp/support/submit.aspx

トライアル・お問い合わせ

関連コンテンツ