Incorrect integer value: 'null' for column 'T1' at

该问题的由来:
 见个人另外一篇文章(http://my.oschina.net/u/1462678/blog/227170)那个visio图片
 
伪sql语句: (database1 和 database2 中的table1 相同的结构,重要的是有个auto_increment 性质的id 列)
    java

select *from database1.table1 

insert into table1 values(null,value1,value2,value3,value4);

table1的建表语句:
 mysql

 CREATE TABLE `table1` (

    `ID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT  ,

    `DNT` datetime DEFAULT NULL,

    `T1` int(10) DEFAULT NULL,

    `T2` int(10) DEFAULT NULL,

    `T3` int(10) DEFAULT NULL,

    `T4` int(10) DEFAULT NULL,

    `T5` int(10) DEFAULT NULL,

    `T6` int(10) DEFAULT NULL,

    `T7` int(10) DEFAULT NULL,

    `T8` int(10) DEFAULT NULL,

    `T9` int(10) DEFAULT NULL,

    `T10` int(10) DEFAULT NULL,

    `W1` int(10) DEFAULT NULL,

    `W2` int(10) DEFAULT NULL,

     PRIMARY KEY (`ID`)

  ) ENGINE=InnoDB  AUTO_INCREMENT =1 DEFAULT CHARSET=utf8;


table1中的数据量:
          8万多条数据,20M实际大小
报错:sql

        java.sql.SQLException: Incorrect integer value: 'null' for column 'T1' at row 58060 服务器

 查看致使报错的语句:   eclipse

         insert into table1 values(null,value1,value2,value3,value4);
         该语句中有个null 的value值,其目的其一是id是auto_increment列,其二我要短期内操做1万左右张表,每张表之间是不一样的,无法指定表的列名
  
报错分析:
         一、看到错误的那一刻我觉得是个人表里id为58060的T1列是空值,可是当去select该列的时候,该列的数据表中有数据
     二、而后我想着把insert语句print出来,可是由于数据量的缘由,致使打印出来ecplise奔溃,果断改成写文本,可是写下来的文本中没办法看到null的数据(好吧果断将数据表中有空值的想法抛弃了);
     三、而后我开始怀疑个人java程序(由于个人java程序是经过将A服务器上的数据拿过来通过字符串(bufferbulider方式处理)的拼接,拼接出本身的insert语句,以后插入到B服务器中的表)bufferbuilder的处理有问题,当我使用eclipse的debug方式处理的时候看到有的bufferbuilder中的值是空值,此时脑子中想的都是垃圾处理啊,总之就是觉得处理过程当中程序写的有问题,闹出来的空值;
     四、可是当我就让程序报错,一直执行,出现的情况是有些个表的insert是OK的,而后我能够可定的是个人程序没问题;
     五、这样的结果就是我本身把本身绕住了,走进一个圈里,出不来了,只得求助个人技术主管(主管就是主管,听了个人问题分析,他就下手了,我以为由于他是局外人,首先怀疑的是数据表中有空值,可是呢他丫没直接说就是改了改个人代码而后找到了数据表中的空值,显得好牛逼啊)
     六、其中有个重要的东西是个人数据data 取过来后 由于考虑数据量大的缘由因此手动分批次提交数据,而后一张表若是分为4份来提交可能前边俩份数据能够正常提交,可是后边遇到数据有问题的行时候报了错,Incorrect integer value: 'null' for column 'T1' at row 58060

 
最终结果:ide

         一、数据表中有空值;
          二、这个跟网上说的 java.sql.SQLException: Incorrect integer value: '' for column 'id' at row 1  这样的错误是没半毛钱关系
          三、主要缘由是我手动分批次提交了,致使对java.sql.SQLException: Incorrect integer value: 'null' for column 'T1' at row 58060 的理解出现误差,简单来讲是这样的,若是你的数据有80000条,分20000提交一次,40000提交一次,60000提交一次,80000提交一次,而后这个错误实际上说的是60000提交那次报的错(在该次提交中58060 的条中T1是空值,而事实上就是这样),惋惜我彻底忘记了我手动分批次提交对mysql驱动来讲每次提交都是一个new commit ,好尴尬。
ui


收获:
         一、每一次作程序前,须要认真的作分析,各类分析,对每一种要处理的问题划分下来各个击破; 二、作程序,思惟很重要,当遇到问题的时候最好用排除法将问题的范围缩小,定位,解决; 三、当问题没法解决是,停下,看看是否那里不对劲,最好对已经排除的问题再次怀疑一次(越以为可靠的地方每每是问题的高发地带); 四、记得将每次遇到的问题总结下来,这是一笔财富;
相关文章
相关标签/搜索