2011-11-03 54 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