mysql错误代码:1262x行被截断;它包含的数据比输入列多

wi3ka0sx  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(814)

我需要将文件内容加载到表中。文件包含用逗号分隔的文本。这是一个很大的文件。我不能改变它已经给我这样的文件。

12.com,128.15.8.6,TEXT1,no1,['128.15.8.6']
23com,122.14.10.7,TEXT2,no2,['122.14.10.7']
45.com,91.33.10.4,TEXT3,no3,['91.33.10.4']
67.com,88.22.88.8,TEXT4,no4,['88.22.88.8', '5.112.1.10']

我需要将文件加载到一个包含四列的表中。例如,上面的最后一行应该在下表中:
table.col1:67.com
表2.2:88.22.88.8
表3.col3:text3
表4:no3
表5.col5:['88.22.88.8','5.112.1.10']
使用mysql工作台,我创建了一个表,其中有五列都是 varchar . 然后运行以下sql命令:

LOAD DATA INFILE '/var/lib/mysql-files/myfile.txt'
  INTO TABLE `mytable`.`myscheme`
  fields terminated BY ','

最后一列字符串(其中包含我不想分隔的逗号)会导致问题。

Error:
Error Code: 1262. Row 4 was truncated; it contained more data than there were input columns

请问我怎样才能克服这个问题。

qvsjd97n

qvsjd97n1#

简单地使用加载数据填充并不是那么困难-注意变量的使用。

drop table if exists t;
create table t(col1 varchar(20),col2 varchar(20), col3 varchar(20), col4 varchar(20),col5 varchar(100));

truncate table t;

load data infile 'test.csv' into table t LINES TERMINATED BY '\r\n' (@var1)

    set col1 = substring_index(@var1,',',1),
    col2 = substring_index(substring_index(@var1,',',2),',',-1),
    col3 = substring_index(substring_index(@var1,',',3),',',-1),
    col4 = substring_index(substring_index(@var1,',',4),',',-1),
    col5 = concat('[',(substring_index(@var1,'[',-1)))

;

select * from t;
    +--------+-------------+-------+------+------------------------------+
| col1   | col2        | col3  | col4 | col5                         |
+--------+-------------+-------+------+------------------------------+
| 12.com | 128.15.8.6  | TEXT1 | no1  | ['128.15.8.6']               |
| 23com  | 122.14.10.7 | TEXT2 | no2  | ['122.14.10.7']              |
| 45.com | 91.33.10.4  | TEXT3 | no3  | ['91.33.10.4']               |
| 67.com | 88.22.88.8  | TEXT4 | no4  | ['88.22.88.8', '5.112.1.10'] |
+--------+-------------+-------+------+------------------------------+
4 rows in set (0.00 sec)
k7fdbhmy

k7fdbhmy2#

这太长了,不能发表评论。
你的csv文件中有一个可怕的数据格式。我认为你应该重新生成文件。
mysql有一些工具可以帮助您处理这些数据,特别是 OPTIONALLY ENCLOSED BY 中的选项 LOAD DATA INFILE . 唯一需要注意的是,这允许一个转义字符而不是两个。
我的第一个建议是用另一个字符替换字段分隔符——tab或 | 我想起来了。字段中不用于值的任何字符。
第二种是使用双引号 OPTIONALLY ENCLOSED BY . 然后更换 '[''"[' 以及 ]']"' 在数据文件中。即使无法重新生成文件,也可以使用grep、pearl或python之类的工具对其进行预处理,以进行简单的替换。
然后可以使用mysql的导入工具来加载文件。

cqoc49vn

cqoc49vn3#

在这种情况下,为了避免与逗号不正确存在相关的问题,您可以导入行。。在单列表中(在medimun文本上键入文本..根据需要)
热利用 locate (一个用于第一个逗号,一个用于第二个,一个用于第三个..)以及 substring 您可以从每行中提取所需的四列
最后是一个 insert select 您可以填充目标表。。根据需要分开柱子。。

相关问题