列数较多的csv文件导入mysql数据库(过程及问题记录)

刚接触mysql,想把几个表导入到数据库中,结果就遇到了问题。

原始数据是这样的:

列数较多的csv文件导入mysql数据库(过程及问题记录)_第1张图片

1、使用navicat报错:

[ERR] Cannot create table[china_sites_20140516]: 1118 - Row size too large. The maximum row size for theused table type, not counting BLOBs, is 65535. This includes storage overhead,check the manual. You have to change some columns to TEXT or BLOBs

 列数较多的csv文件导入mysql数据库(过程及问题记录)_第2张图片

按照这个报错的解决方法是:在这一步手动一个个将type改为text或blob,但表格有近千列…

在群里咨询了下,有人给出这样的解决方案:先定义一个游标,读出所有表名,然后用动态sql语句,改变字段类型。但是我还没有试这种方式。

 

2、使用mysql的load data infile:

先是新建了一个表,由于待导入的表有近千列,也就是有近千个属性字段,我在新建表格时,只新建了一个字段。

然后,用下面语句导入:

LOAD DATA local INFILE "E:\test.csv"

replace INTO TABLE test

CHARACTER SET gbk

FIELDS TERMINATED BY ","

 ENCLOSED BY ""

LINES TERMINATED BY "\r\n"

IGNORE 1 LINES;

结果没报错但出了警告,表格没导入成功:

| Warning | 1262 | Row 1 was truncated; itcontained more data than there were input columns

这句话的意思是导入的表格列数超标,被截断了。

估计是新建表格,只新建了一列的原因,但我不能手动新建近千列字段呀。

3、不完美的解决方案

试着将数据进行缩减,只保留必要数据,然后用navicat向mysql数据库中导入数据。把数据缩减之后,列数还是很多,在导入时还是会报上面的错误,经过观察发现缩减后的数据经过转置之后只有24列,我就把缩减的数据转置后进行导入,成功了。我接着把原始数据也进行了转置,但转置之后也报错,估计还是列数太多了,因为原始数据转置之后也有340列。

 4、总结

虽然这个问题,目前没有解决,但我想总结下以后遇到这种摸不着头绪的问题的解决思路。不然像这次我在网上找了各种方法,也实验了各种方法,但都不奏效,一天下来,自己脑袋都晕了。1)借助报错信息,发现问题所在。这点是比较重要的,我刚开始不懂得看报错信息,也不知道从哪里找报错信息,一直纳闷哪里出错了。2)回顾下,软件操作是否正确,代码输入是否符合语法规则。3)有可能是原始数据的问题。由前两点可以看出还是要在基本了解软件操作或代码操作的基础上再进行工作,不然出错了都不知道从哪入手。

你可能感兴趣的:(数据库)