2017-07-18 18 views
0

以下是我用於將CSV文件導入到MySQL數據庫的代碼。它可以很好地劃分所有的領域和它的記錄。MySQL:從VARCHAR字段中的逗號組成的CSV中加載數據信息

LOAD DATA INFILE 'file.csv' 
INTO TABLE customer FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' 
(
    ID, name, salary, address, status 
); 

但是,當存在包含逗號(',')的VARCHAR或TEXT字段時,它的工作不正確。這是因爲我使用FIELDS TERMINATED BY','來分隔每個字段記錄。

因此,例如,如果一個工資爲50,000(雙)的客戶正常地拆分該字段。但是,如果客戶地址是Java Road 15,香港(varchar/text),Java Road 15將被保存在地址欄中,而香港將被保存到狀態欄。這基本上刪除狀態字段內的任何記錄。這個問題的任何線索?提前致謝。

+0

示例數據將有所幫助。我猜文本字段中的逗號必須被轉義... – mauro

+0

CSV文件中包含逗號的元素是否被引用?如果是這樣,你應該指定引號字符。 –

+0

我只是想改變由其他分隔符終止的字段,但它顯示一個錯誤。如果我想將分隔符更改爲^,我應該在代碼中寫入什麼內容? – Tan

回答

0

是否用雙引號或其他內容括起來的字段?如果是這樣,您可以在查詢中添加「ENCLOSED BY」。

FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n'; 

「封閉」指定識別字段開始和結束的字符。就你的情況而言,現場附有雙引號,如「Java Road 15,Hong Kong」。它有助於MYSQL正確提取字段,即使字段中有字段分隔符。

MySQL手冊:https://dev.mysql.com/doc/refman/5.7/en/load-data.html

+0

不,有問題的領域實際上是對客戶的評論,例如直接交易,現金。直接交易和現金之間的逗號將此評論分爲下一個字段。 – Tan

+0

等一下,它適用於封閉,我不知道爲什麼。你能解釋我是如何被作品包圍的嗎?我想了解它 – Tan

+0

更新回答與解釋。 – Eddie

1
LOAD DATA INFILE 'file.csv' 
INTO TABLE customer FIELDS TERMINATED BY ',' ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 
(
    ID, name, salary, address, status 
); 

試試這一個。

+0

是的,它的工作方式與上述解決方案相同。它需要附上。你能解釋一下,實際上封閉的功能是什麼? – Tan

0

如果有人碰巧在這個答案跌倒,我想分享B/C這個我花了太長的方式來弄清楚 - 使用的是Mac,datagrip中,MySQL 5.7+,調查答覆的問題:

DROP TABLE IF EXISTS surveyQuestion_ID; 
#create table 
CREATE TABLE surveyQuestion_ID 
(
    surveyQuestion_ID INT(11) NOT NULL, 
    surveyDescription TEXT, 
    surveyResponse VARCHAR(25) DEFAULT NULL, 
    PRIMARY KEY (surveyQuestion_ID) 
); 
#load query 
LOAD DATA LOCAL INFILE 'file_location/file.csv' INTO TABLE surveyQuestion_ID 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES 
(surveyQuestion_ID, surveyDescription, surveyResponse); 

希望這可以幫助。

相關問題