【发布时间】:2019-03-04 02:49:15
【问题描述】:
我正在尝试通过批量插入选项将数据从 CSV 文件加载到 MYSql 数据库。下面是创建表的语法和 CSV 文件
CREATE TABLE discounts (
id INT NOT NULL ,
title VARCHAR(10) NOT NULL,
expired_date DATE NOT NULL,
amount VARCHAR(255 ) NOT NULL
);
CSV 文件格式:
"475","Back","20140401","FFFF"
"476","bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","20140901","DDD"
SQL 查询:
LOAD DATA INFILE 'C:\Users\karthick\Desktop\data.csv'
INTO TABLE discounts
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';
在上面的创建表语法中,我已将“标题”列的数据长度指定为“10”。但是数据文件中第二行的值超过了10。
当我执行 SQL 查询时,数据已成功加载到 MySQL 数据库,这是以下输出,第二行中的“标题”字段的值被截断。您能否建议如何在不截断行的情况下停止加载行。如果数据合适,它还应该加载下一个连续行而不终止。请推荐
数据库输出:
'475', 'Back', '2014-04-01', 'FFFF'
'476', 'bbbbbbbbbb', '2014-09-01', 'DDD'
【问题讨论】:
-
使用
title VARCHAR(100)?我的意思是,如果字段的固定宽度为 10,那么它只能存储 10 个字符,对吧? -
我希望数据库在数据长度超过限制的情况下会抛出错误。有没有可能?请建议
-
你知道这个数据的最大宽度吗?如果是这样,那么只需创建适当的表并加载数据。
-
我知道数据的宽度,但在某些情况下可能会违反。那么有没有可能拒绝数据库端的完整行?我的目标是该行应该被拒绝。
-
我在下面给了你一个答案,只有一个选项。可能还有其他方法。
标签: mysql bulkinsert sqlbulkcopy truncation