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コマンドをコメント付きでクエリを実行する。

phpMyAdminでストアドを登録するとスクリプト内部にあるコメントも、ソース …

mysql
[MySQL]コマンドでのSQL文入力の途中キャンセル

mysqlをコマンドラインで操作している際、特に複数行、SQL文を入力してて途中 …

mysql
[MySQL]Cannot load from mysql.proc. The table is probably corrupted

mysqlのストアドプロシージャの再登録をしようとすると、下記のエラーが表示され …

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

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

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

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

mysql
MySQL 権限一覧

権限 意味 ALL [PRIVILEGES] GRANT OPTION 以外の全 …

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

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

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

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

mysql
[MySQL]データベースごとのサイズをSQLで一発で取得する

各データベースに接続して、単体でデーターベースサイズや、各テーブルのサイズを取得 …

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

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