2011-08-11 11 views
4

エクセルからエクスポートしたCSVファイルをデータベースにロードしようとしていますが、何をしようとしても正しい書式設定が得られないようです。ここでLOAD DATA INFILEを使用してCSVをインポートする引用符の問題

はSQLです:

LOAD DATA INFILE 'path/file.csv' 
INTO TABLE tbl_name 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
(column1, column2, column3); 

は、これが正常に動作しますが、行(列3)の終わりを引用符で終了したとき、私はトラブルに実行します。たとえば:

実際の値:CSVでThese are "quotes"

値:"These are ""quotes"""

何が起こるかというと、それは別の引用に到達するまで、私はデータベースとも任意の追加行にその値に余分な引用符を取得することですCSVでどのようにこれを解決するための任意のアイデアですか?

答えて

9

Hmm。私はこの問題を再現しようとしましたが、できません。私のデータはあなたのものとどこが違うのですか?これを複製するサンプルデータを提供できますか?ここに私がやったことだ:(?)

> cat /tmp/data.csv 
"aaaa","bbb ""ccc"" ddd",xxx 
xxx,yyy,"zzz ""ooo""" 
foo,bar,baz 

mysql> CREATE TABLE t2 (a varchar(20), b varchar(20), c varchar(20)); 
Query OK, 0 rows affected (0.01 sec) 

mysql> LOAD DATA INFILE '/tmp/data.csv' INTO TABLE t2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' (a, b, c); 
Query OK, 3 rows affected (0.00 sec) 
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0 

mysql> select * from t2; 
+------+---------------+-----------+ 
| a | b    | c   | 
+------+---------------+-----------+ 
| aaaa | bbb "ccc" ddd | xxx  | 
| xxx | yyy   | zzz "ooo" | 
| foo | bar   | baz  | 
+------+---------------+-----------+ 
3 rows in set (0.00 sec) 

は私には[OK]を検索します

はまた、あなたがWindowsプラットフォーム上で作業している場合は、代わりに
LINES TERMINATED BY '\r\n'を使用する必要があるかもしれないことに注意してください。

+2

ありがとうございます!問題は、代わりに 'LINES TERMINATED BY '\ r \ n'''を使う必要があることでした。 – Vanessa

+1

偉大な答え、私はあなたが上記を持っているものを試してみましたが、エラー29(HY000):ファイル '/tmp/data.csv'が見つかりません(Errcode:13)、私もロードデータを追加しようとしました。エラーERROR 1148(42000):使用されているコマンドはこのMySQLバージョンでは許可されていません。5.5.34を使用しています。一時フォルダのアクセス権はdrwxrwxrwtですか? – ak85

+0

@ ak85これは通常、MySQLサーバがそれらのコマンドを実行しているクライアントと同じホストにない場合に発生します。クライアントではなく、データをロードする必要のあるサーバーであることが分かります。したがって、リモートサーバーに接続している場合は、まずデータをサーバーにアップロードしない限り、このようなデータをインポートすることはできません。 – Casper

関連する問題