【发布时间】:2016-10-05 09:47:22
【问题描述】:
我正在将 .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 行的列 'cmets' 的数据太长"
我查看 .csv 的第 63 行,“cmets”的长度为 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 解决方案对我来说似乎有点牵强,因为我插入的所有数据(创建数据库语句、创建表语句、CSV 等)都是从另一台服务器提取的其中允许完全相同的行。我使用 Mysql Workbench 来提取创建/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 格式。
【问题讨论】:
-
您是否检查过数据中的杂散逗号或换行符是否会影响 MySQL 导入数据的方式?
-
@Shadow 这是行(经过混淆处理,但保留非字母数字字符)
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"\r\n。逗号或换行符似乎设置正确。我在更新部分添加了更多信息。 -
将
comments设置为更高的字符长度,导入,然后查看MySQL 在此记录中为该列返回的长度...? -
MySQL 可能将其解释为行尾的字符(如换页)呢?换页不是可见字符。此外,错误消息提到第 63 行,但数据似乎来自第 64 行(SID 可能不同,但谁知道)。
-
@Shadow id 与行号的差异是由于标题 (
IGNORE 1 ROWS)。