2011-11-03 48 views
0

使用以下sql導入使用mysql的「加載數據」的數據。描述字段包含分號,那麼分號後傳來的內容不插入使用包含分號的數據加載數據錯誤

LOAD DATA LOCAL INFILE '/tmp/phpz4m7Rl' INTO TABLE `mytable` FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n' 

實際數據如下

1;2;3;D;Testdata: Testing; 100% Perfect 

給出,但它是隻插入

1;2;3;D;Testdata: Testing; 

我的表結構

CREATE TABLE `mytable` (
    `id` text NOT NULL, 
    `category` varchar(12) NOT NULL, 
    `product` varchar(12) NOT NULL, 
    `language` text NOT NULL, 
    `description` text NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

我應該更改哪些數據才能獲取完整數據?

+1

@Salman A我認爲不應該有一個。我相信binoy希望填充「Testdata:Testing; 100%Perfect」的描述欄。但是,由於此字符串包含分號分隔符,因此它將字符串截斷爲「Testdata:Testing」 –

+0

@Tom:我很抱歉。 –

+0

恐怕你已經結束了需要手動編輯的文件。您也無法將其導入電子表格。如果您100%確定'language'列中不包含';'我可以爲您提供一個PHP腳本來修復數據。那會好嗎? –

回答

3

,我不知道是否以下是可行的,但....

選項1 - 使用不同的分隔符

你可以在字段分隔符從分號更改爲類似波浪號(〜)。所以,你會再有:

數據:

1~2~3~D~Testdata: Testing; 100% Perfect 

命令:

LOAD DATA LOCAL INFILE '/tmp/phpz4m7Rl' INTO TABLE mytable FIELDS TERMINATED BY '~' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n'; 

選擇2 - 附上

或者你可以附上含有分號的任何數據帶有語音標記:

Data

1;2;3;D;"Testdata: Testing; 100% Perfect" 

而且使用原來的命令:

LOAD DATA LOCAL INFILE '/tmp/phpz4m7Rl' INTO TABLE mytable FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n'; 

選擇3 - 逃生

或者逃避問題分號:

1;2;3;D;Testdata: Testing\; 100% Perfect 

和使用您的原始命令:

LOAD DATA LOCAL INFILE '/tmp/phpz4m7Rl' INTO TABLE mytable FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n'; 

祝你好運!

+0

謝謝。我需要一個代碼來處理所有類型的數據,因爲我從不同的人那裏獲取數據。有沒有圖書館來處理這個問題? – binoy