我的目标数据库表中的字段:
CREATE TABLE `TABLE_NAME` (
  `f1`         varchar(25)  default NULL,
  `f2`         varchar(20)  default NULL,
  `f3`         double(15,0) default -1,
  `f4`         varchar(20)  default NULL,
  `f5`         double(15,3) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;源文件:
example_data1.txt:
abc;cdef;;  [注:这里数据只有4个字段,而表中是有5个字段的]执行如下LOAD DATA命令导入数据:load data infile 'D:\\my_program\\Tek_sig\\example_data1.txt'
into table TABLE_NAME
FIELDS TERMINATED BY ';'系统报错:
Data truncated for column 'f3' at row 1
可能是由于字段定义为double型,而文本文件中是空值,将文本文件更新为:
abc;cdef;2;
再次导入,报错如下:
Row 1 doesn't contain data for all columns
分析原因可能是由于表中字段一共是5个,而在文本数据源中只给出了4个字段,少一个字段。
我要问的问题是:
1.LOAD要求源文本文件中的字段与数据库中表的字段数量必须完全一样多吗?
2.对于在数据库中,表的定义中允许有空值的字段,例如`f3`  double(15,0) default -1,在源文本文件中此字段没有数值“abc;cdef;空;”,系统为何报错:
Data truncated for column 'f3' at row 1 ,我理解系统应按空处理,即在数据库中这个字段值为“-1”, 但实际上不是这样的。这一点我觉得MYSQL没有ACCESS的导入功能强大,ACCESS可以允许数据源中少后几个连续字段没有数据也能导入的,而且会自动用DEFAULT空值来处理缺少的那些字段处理,导入后那些源文件中没有数值的字段,在数据库中全部用DEFAULT值来填充上了,很方便的。
由于我表中多的这些字段就是我自已添加的辅助处理字段,在源数据中确实是没有的,这是我设计的算法决定的,但现在却遇到了数据无法导入的问题,以前用ACCESS处理数据没有发现这个问题,但ACCESS处理的数据量最大2G,所以我现在改用MYSQL处理数据,但是遇到了这个数据无法导入的问题。
我不想用代码一条一条的INSERT数据,因为我要处理的数据量太大了,这样会相当慢的!
多谢各位的指教。