我像这样将 .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;
...抛出以下错误:
"Data too long for column 'comments' at row 63"
我查看 .csv 的第 63 行,“comments”的长度为 115。
创建语句似乎没问题(带有 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 来提取 creates/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 格式。
最佳答案
尝试使用 LINES TERMINATED BY '\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;
这很适合我
关于mysql - 加载数据文件(来自 csv): data too long for column 'xxx' at row N,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39870686/