2011-08-11 58 views
4

我試圖從excel導出的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)在報價結束。例如:

實際值:These are "quotes"

價值CSV:"These are ""quotes"""

會發生什麼事,我會得到一個額外的報價就在數據庫中,該值也可以是任何其他行,直到它到達另一個報價在CSV中。有關如何解決這個問題的任何想法?

回答

9

嗯。我試圖重複這個問題,但不能。我的數據與你的數據有什麼不同?你能提供樣本數據來複制這個嗎?下面是我所做的:

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

看起來沒給我

還要注意的是,如果你在Windows平臺上工作,你可能需要使用
LINES TERMINATED BY '\r\n',而不是(?)。

+2

非常感謝!問題是我需要使用'LINES TERMINATED BY'\ r \ n''來代替。 – Vanessa

+1

好的答案,我試着你上面有什麼,但得到錯誤錯誤29(HY000):找不到文件'/tmp/data.csv'(Errcode:13),我也嘗試添加本地infile負載數據,但得到錯誤錯誤1148(42000):使用的命令不允許使用此MySQL版本我正在使用5.5.34和我的臨時文件夾的權限drwxrwxrwt是否有任何其他我需要檢查在這裏得到這個工作? – ak85

+0

@ ak85當MySQL服務器與您運行這些命令的客戶端不在同一主機上時,通常會發生這種情況。意識到它是需要加載數據的服務器,而不是客戶端。因此,如果您要連接到遠程服務器,則不能像這樣導入數據,除非您首先將數據上傳到服務器。 – Casper