加载数据infile(来自csv):数据太长,不适用于列&x; xxx'在第N行

时间:2016-10-05 09:47:23

标签: mysql csv

我正在将.csv导入Mysql,如下所示:

LOAD DATA INFILE '(...)/contact_acquisition.csv'
INTO TABLE rs_ui_db.contact_acquisition
CHARACTER SET utf8
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;  

...会抛出以下错误:

  

"数据列太长,以及评论'在第63行"

我查看.csv的第63行,以及"评论"长度为115。

create语句似乎正常(使用comments char(255)):

CREATE DATABASE IF NOT EXISTS `my_db` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `my_db`;

DROP TABLE IF EXISTS `contact_acquisition`;
CREATE TABLE `contact_acquisition` (
  `SID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `pilot` char(255) NOT NULL,
  `contact` char(255) NOT NULL,
  `email` char(255) NOT NULL,
  `tel` char(255) NOT NULL,
  `comments` char(255) NOT NULL,
  PRIMARY KEY (`SID`)
) ENGINE=InnoDB AUTO_INCREMENT=76 DEFAULT CHARSET=utf8; 

在将其标记为重复之前,请注意:

This StackOverflow解决方案显然不适合:我已经将CHARACTER SET utf8添加到LOAD DATA sql。

This其他StackOverflow解决方案对我来说似乎有点牵强,因为我插入的所有数据(create database语句,create table语句,CSV等等)都是从中提取的另一个允许完全相同行的服务器。我使用了Mysql Workbench来提取creat / csv等。

我正在尝试从一台服务器自动导出到另一台服务器,因此更改目标中的数据类型对我来说不是一种选择。

更新

这是一行(混淆了,但保留了非字母数字字符):

64,xxxx xxxx,"xxxx xxxx, xxxx xxxx","xxxx.xxxx@xxxx.xxxx, xxxx.xxxx@xxxx-xxxx.xxxx.xxxx",xxxx (xxxx) xxxx xxxx xxxx xxxx xxxx (xxxx),"xxxx xxxx xxxx'xxxx xxxx xxxx xxxx xxxx xxxx xxxx, xxxx xxxx xxxx'xxxx xxxx xxxx'xxxx xxxx xxxx xxxx xxxx"

MySQL抱怨的部分是:"xxxx xxxx xxxx'xxxx xxxx xxxx xxxx xxxx xxxx xxxx, xxxx xxxx xxxx'xxxx xxxx xxxx'xxxx xxxx xxxx xxxx xxxx"。其中包含",包含1个逗号和3个'。正确导入的其他行(来自相同的CSV)也具有这些字符。长度似乎是与其他线条的唯一区别。

csv文件位于utf8。

1 个答案:

答案 0 :(得分:2)

尝试使用以'\ r \ n'终止的行

LOAD DATA INFILE '(...)/contact_acquisition.csv'
INTO TABLE rs_ui_db.contact_acquisition
CHARACTER SET utf8
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS;

这对我来说很完美