Read it later.

Web製作に関するサーバ構成やコーディングネタの備忘録として使ってます。

*

[MySQL]LOAD DATA INFILEで正常にCSVデータを読み込めない

   

※winscpを使って開発している人だけ、ご覧下さい。

LOAD DATA INFILEで、エラーもない、警告もない、スキップもない、でも取り込めていない

LOAD DATA INFILE文での出来事。

作業環境がWinscp+外部エディタを使用して、その事件は起こりました。

Winscpでリモートファイル(CSV)を外部エディタで開き、ファイル保存し、
その編集したファイルに対し、LOAD DATA INFILEを実行したところ、
『警告なし、エラーなし、スキップレコードなし』の三点セットであたかも正常に処理が終わったようなレスが帰ってきた。

しかし、実際にSELECTして、取り込めたデータを確認したところ、1件もデータが登録されていない。orz…

ちなみに、
ローカルで同じ編集をして、アップロードしたところ、正常に取り込めた。めっちゃ謎。

CSVファイルは、テキスト転送ではなく、バイナリ転送しましょう

根気よく調べたところ、結論からいうと、Winscpでファイル転送を行った際に、テキストモードでアップロードが行われていた。

じゃあ、転送モードの設定がおかしいんじゃない?ってツッコミたくなるだろうけど、
実際設定されていた転送モードの設定は、下記の通り。

デフォルト=>自動判別
テキスト=>テキスト
バイナリ=>バイナリ。

そう、デフォルトの設定のままで、csvファイルはバイナリで転送されるようになっているのです。

で、結局どこがいけなかったかというと、外部エディタの設定がおかしかったわけで、
WINSCPエディタ-デフォルト
通常、↑こんな感じで、それを踏襲して、外部エディタを設定していたのだけど、
WINSCPエディタ-外部エディタ
↑のような感じで設定しなくちゃいけなかったみたいです。
どこが違うかというと、
『外部エディタでのファイル編集時には強制的にテキスト転送モードにする』、こいつにチェックが入ってて大はまりしたのが、今回の顛末でした。

テキスト転送かバイナリ転送どっちになっているかには要注意と、改めて再認識しましたとさ。

 - MySQL

  関連記事

mysql
[MySQL]よく使うコマンド一覧

自分用のメモです。

mysql
[MySQL]innodbチューニング

いま携わっているプロジェクトでMySQLを使用しているのだけど、主要テーブル全て …

mysql
MySQL用シーケンス制御ファンクション集(PostgreSQL風にファンクションを揃えてみた)

MySQLには、PostgreSQLのようなシーケンスが機能的にないので、作って …

mysql
[MySQL]プロセスの確認と、プロセスの強制終了

ストプロ内でのどのSQLが実行されているかもプロセスを見れば分かる MySQL内 …

mysql
[MySQL]テーブルのカラムのコメントの変更

MySQLでカラムのコメントを変更する方法を探してみた。 結局、カラムの再定義と …

mysql
Windows7でMySQL Connectorのインストールに失敗する – Error installing ODBC driver MySQL ODBC 5.5 Driver

Error installing ODBC driver MySQL ODBC …

mysql
[MySQL]SELECT文で、FROM句を使用しないで、WHERE句を使用する

『SELECT文で、FROM句を使用しないで、WHERE句を使用する』 といった …

mysql
[MySQL][phpMyAdmin]Allowed memory size of XXXXXX bytes exhausted (tried to allocate XXXXXX bytes)

こんな現象がおきました phpMyAdminでデータベース全体をエクスポートした …

mysql
mysqlで一般クエリログをする

mysqlで一般クエリログをするためには、 my.cnfをいじるといいのだけど、 …

mysql
MySQL 5.5からMySQL 5.6へのアップグレード後の諸々の対応

先日、とあるシステムのデータベースをMySQL5.5からMySQL5.6にアップ …