[MySQL]LOAD DATA INFILEで正常にCSVデータを読み込めない
※winscpを使って開発している人だけ、ご覧下さい。
LOAD DATA INFILEで、エラーもない、警告もない、スキップもない、でも取り込めていない
LOAD DATA INFILE文での出来事。
作業環境がWinscp+外部エディタを使用して、その事件は起こりました。
Winscpでリモートファイル(CSV)を外部エディタで開き、ファイル保存し、
その編集したファイルに対し、LOAD DATA INFILEを実行したところ、
『警告なし、エラーなし、スキップレコードなし』の三点セットであたかも正常に処理が終わったようなレスが帰ってきた。
しかし、実際にSELECTして、取り込めたデータを確認したところ、1件もデータが登録されていない。orz…
ちなみに、
ローカルで同じ編集をして、アップロードしたところ、正常に取り込めた。めっちゃ謎。
CSVファイルは、テキスト転送ではなく、バイナリ転送しましょう
根気よく調べたところ、結論からいうと、Winscpでファイル転送を行った際に、テキストモードでアップロードが行われていた。
じゃあ、転送モードの設定がおかしいんじゃない?ってツッコミたくなるだろうけど、
実際設定されていた転送モードの設定は、下記の通り。
デフォルト=>自動判別
テキスト=>テキスト
バイナリ=>バイナリ。
そう、デフォルトの設定のままで、csvファイルはバイナリで転送されるようになっているのです。
で、結局どこがいけなかったかというと、外部エディタの設定がおかしかったわけで、
通常、↑こんな感じで、それを踏襲して、外部エディタを設定していたのだけど、
↑のような感じで設定しなくちゃいけなかったみたいです。
どこが違うかというと、
『外部エディタでのファイル編集時には強制的にテキスト転送モードにする』、こいつにチェックが入ってて大はまりしたのが、今回の顛末でした。
テキスト転送かバイナリ転送どっちになっているかには要注意と、改めて再認識しましたとさ。
関連記事
-
-
MySQLのrootパスワードが分からなくなったら
rootのパスワードが分からなくなったとき、どうすることもできないと観念したら、 …
-
-
MySQL 5.5からMySQL 5.6へのアップグレード後の諸々の対応
先日、とあるシステムのデータベースをMySQL5.5からMySQL5.6にアップ …
-
-
mysqlで一般クエリログをする
mysqlで一般クエリログをするためには、 my.cnfをいじるといいのだけど、 …
-
-
mysqlコマンドをコメント付きでクエリを実行する。
phpMyAdminでストアドを登録するとスクリプト内部にあるコメントも、ソース …
-
-
[MySQL]コマンドでのSQL文入力の途中キャンセル
mysqlをコマンドラインで操作している際、特に複数行、SQL文を入力してて途中 …
-
-
MySQL用シーケンス制御ファンクション集(PostgreSQL風にファンクションを揃えてみた)
MySQLには、PostgreSQLのようなシーケンスが機能的にないので、作って …
-
-
[MySQL]よく使うコマンド一覧
自分用のメモです。
-
-
[MySQL]ストアドプロシージャをmysqldumpでダンプできない – user has insufficent privileges to SHOW CREATE PROCEDURE
データベースに対して、ALL PRIVILEGES権限を割り当てているユーザでm …
-
-
[MySQL]テーブルのカラムのコメントの変更
MySQLでカラムのコメントを変更する方法を探してみた。 結局、カラムの再定義と …
-
-
[MySQL]プロセスの確認と、プロセスの強制終了
ストプロ内でのどのSQLが実行されているかもプロセスを見れば分かる MySQL内 …