我建了个表,定义如下:
   create table t1( c int);
然后件了个.txt文件,在其中输入数据 4000\n,保存后,在mysql窗口输入load data infile 'e:/test.txt' into table t1;
系统提示OK,查询时也的确有插入了数据4000.
  然而,后来我将c的数据类型int更改为float,然后在窗口中用insert 插入无论整数还是小数都可以,可是在test.txt中将数据改为整数或小数后,然后在窗口输入load data infile 'e:/test.txt' into talbe t1;可是系统都提示出现同样的问题,错误如下:error 1265(01000):Data truncated for column 'c' at row 1
   我很奇怪为什么改为float 类型后用insert 能插入数据,而用load data infile却不能,希望高手们能给我指点下,小弟不胜感激!

解决方案 »

  1.   

    贴出你的 show create table t1, 和你的e:/test.txt文件内容。这样别人可以直接测试。
      

  2.   

    怎么贴啊?好像发不了图哦?
    e:/test.txt文件的内容是:
    4000\n
    3000\n
    2000\n
    1000\n
    mysql>create table t1
        ->(c int);
    Query OK.
    mysql>load data infile 'e:/test.txt' into table t1;
    Query OK.
    查询表后显示数据输入成功。
    现如下做更改:
    mysql>delete from t1;
    Query OK
    mysql>alter table t1 modify c float;
    Query OK.
    mysql>select * from t1;
    Empty set (0.05 sec)
    mysql>load data infile 'e:/test.txt' into table t1;
    ERROR 1265 (01000):Data truncated for column 'c' at row1
    至此,文件中的数据没变动过。
    后来将文件中的数据(整数来的)全更改为小数,再提示以下错误:
    mysql>load data infile 'e:/test.txt' into table t1;
    ERROR 1265 (01000):Data truncated for column 'c' at row1大侠们帮帮忙!
      

  3.   

    那是因为你的MySql设置问题,你可以先输入:SHOW VARIABLES LIKE 'sql_mode';查看里面的设置,
    不出意外的话讲话显示:STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    这时你输入:set @@GLOBAL.sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';修改里面的设置再重启一下MySql,重新载入就可以。
    注:我已试验过,结果是:
    4000.1
    3000.2
    2000.5
    1000.4
      

  4.   

    大侠,我按照你的试过了,可是还是不行啊,还是提示ERROR 1265 (01000):Data truncated for column 'c' at row1唉,郁闷了...
      

  5.   

    应该是数据类型上的原因,尝试着修改为Decimal,成功导入数据。mysql> alter table t1 modify c DECIMAL(8,4);
    Query OK, 4 rows affected (0.19 sec)
    Records: 4  Duplicates: 0  Warnings: 0mysql> load data infile 'F:/Cherish/学习总结/MySQL/test.txt' into table t1;
    Query OK, 4 rows affected (0.09 sec)
    Records: 4  Deleted: 0  Skipped: 0  Warnings: 0
      

  6.   


    4个步骤解决你的问题:1.修改SQL_mode的设置,取消STRICT_TRANS_TABLESmysql> set @@GLOBAL.sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    Query OK, 0 rows affected (0.00 sec)
    2.将test.txt文件修改为:(请注意第一行,不要用任何数据,一个换行即可)4000\n
    3000\n
    2000\n
    1000\n3.修改表的enginemysql> alter table t1 engine=myisam;
    Query OK, 0 rows affected (0.13 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    4.再次导入数据。mysql> alter table t1 engine=myisam;
    Query OK, 0 rows affected (0.13 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    5.还原表enginemysql> alter table t1 engine=innodb;
    Query OK, 0 rows affected (0.13 sec)
    Records: 0  Duplicates: 0  Warnings: 0
      

  7.   

    数据类型?float不是实数类型么?那么输入实数应该不会出错啊?
      

  8.   

    这位大侠,我按你的方法试过了,的确可行。可是我有个疑问,为什么类型是float时便输入不了呢?
    float类型不是可变的么?不过又搜索了下,好像很多人支持用decimal类型!谢谢大侠!