Pertanyaan Mengimpor CSV menggunakan masalah kutipan LOAD DATA INFILE


Saya mencoba untuk mendapatkan file CSV ini yang saya ekspor dari excel dimuat ke dalam database saya dan saya tidak bisa mendapatkan format yang benar tidak peduli apa yang saya coba.

Berikut ini adalah SQL:

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

Ini berfungsi dengan baik tetapi kemudian saya mengalami masalah ketika akhir baris (kolom 3) berakhir dengan kutipan. Sebagai contoh:

Nilai sesungguhnya: These are "quotes"

Nilai dalam CSV: "These are ""quotes"""

Apa yang terjadi adalah saya akan mendapatkan penawaran tambahan tentang nilai tersebut dalam basis data dan juga setiap baris tambahan hingga mencapai kutipan lain dalam CSV. Ada gagasan tentang cara menyelesaikan ini?


4
2017-08-11 00:23


asal


Jawaban:


Hmm Saya mencoba menduplikasi masalah ini tetapi tidak bisa. Di mana data saya berbeda dengan milik Anda? Dapatkah Anda memberikan data sampel untuk menduplikasi ini? Inilah yang saya lakukan:

> 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)

Terlihat baik untuk saya (?)

Perhatikan juga bahwa jika Anda bekerja pada platform Windows, Anda mungkin perlu menggunakannya
LINES TERMINATED BY '\r\n' sebagai gantinya.


9
2017-08-11 01:23