51ch @Nippon

こちらは高橋晃一の自己マンサイトです。万が一興味があればどうぞ。メッセージはお気軽に。

*

CSVをMySQLへ取り込み&改行コードについて

   


■背景
今回、Mac端末を使って、csvファイルからMySqlのテーブルにデータを入れ込みたかった。
そこでググると、まず出てくるのが、この構文

LOAD DATA LOCAL INFILE ‘/root/xxx.csv’ INTO TABLE テーブル名 FIELDS TERMINATED BY ‘,’ ENCLOSED BY ‘”‘;

しかし、これを実行しても1行取り込まれるだけでした。しかも select * from テーブル名; で表示されるデータは、なんかずれてる。

どうしたらいいのだろうか?

広告

■対応
LOAD DATA INFILEコマンドについてより調べた。
まず、LOCALをつけることで得られる効果⇒2つ取り込み対象ファイルへのアクセス権限有無にかかわらず実行してくれる。重複レコードがあっても実行してくれる。

FELDSTERMINATED BY ‘,’⇒カンマで区切られているよのオプション。terminatedは区切られているの意味。

ENCLOSED BY ‘”‘:囲い文字がある場合のオプション。

今回のファイルは囲い文字ないので、余計なものが入っていたからかな?と思い、該当箇所を削除して実行。
LOAD DATA LOCAL INFILE ‘/root/xxx.csv’ INTO TABLE テーブル名 FIELDS TERMINATED BY ‘,’;

でも結果は、1行しか取り込まれない。
なのでもっと調べることに。

すると、改行コードが入っている場合はそれを指定する必要があることがわかりました。
LINES TERMINATED BY ‘改行コード’:改行コードがある場合のオプション。

この後、改行コードが’\n’を試し、’\r\n’を試し、

今回は’\r’これでいけました。
LOAD DATA LOCAL INFILE ‘/root/xxx.csv’ INTO TABLE テーブル名 FIELDS TERMINATED BY ‘,’ LINES TERMINATED BY ‘\r’;

■そもそも改行コードとは
いまいち理解のできない改行コードを調べました。
LF(Line Feed)
ASCIIコード:0A
\n
CR(CarriageReturn)
ASCIIコード:0D
\r

改行コードは,一般的にWindowsが「CR+LF」,Macが「CR」,Unixが「LF」であるようだ。
MacOSX以降は「LF」になっているそうな。
今回のcsvはMacOSX以降の端末のmac版excelで作成していたのだが、「CR」だったぞ。
なぜかは、よく分からないが、改行コードのLinuxコマンドでの調べ方があった。
$ od -c test.csv | less

参考:http://ultimai.org/database/mysql/mysql-csv-inport.htmlhttp://blogs.yahoo.co.jp/ty_so_long/43425540.html
http://www.yasuc.net/2015/04/moji_bake/

 - プログラミング , ,

  関連記事

携帯からのWordPressが便利でいいーね

 私はiPhoneからWordPressの、アプリ経由で投稿してますが、PC …

エラーSIGABRTのとき

エラーとしてはSIGABRTが出ちゃうパターン。 ログを見ると、 「this c …

swift UITableViewControrlarかUIViewControlarか

普通はUIViewController, UITableViewDataSour …

no image
アニメーション設定時の注意点

アニメーションを指定する時のUIViewの設定は、 UIView.animate …

no image
ボタンへのアクションの設定方法

ボタンの設定してアクションをつけ加える時は、 button.addTarget( …

バックグラウンドで音楽を再生したい

こちらを知りたいと思う時は、きっと既に音楽は流せれるようになったけど、 アプリを …

swift2.0でAWSのSNSを作ってみる

SNSからプッシュ通知を受け取るためのアプリ側での記述方法がswift2.0にな …

Stinger smart.cssが表示されない 犯人はイニシャルP.Jだ!

51chはWordPressで、もはや猫も杓子ものStinger3をテーマに使わ …

ランダム値を発生させるときの注意点 UInt32

スポンサードリンク ランダム値を発生させるときの注意点。 ランダム値を発生させる …

【AngularJS】user別に紐づく値を取得

ユーザーごとに表示する値を変更する場合のメモ。 例えば、ユーザーが保持しているポ …