mysql导入文件出错

用LOAD DATA LOCAL infile导入文件,文件是存在本地的,但是导入却报 file xxxx not found (Errcode: 13) 的错误,想不明白。

作者: pengderun   发布时间: 2011-06-01

会不会是中文路径的问题?

作者: Linkor   发布时间: 2011-06-01

代码是什么

作者: wwwwb   发布时间: 2011-06-01

路径没问题的,已经用'\\'替换掉'\'了,因为只是有时出错,有时可以导入的

作者: pengderun   发布时间: 2011-06-01

if FileExists(task.DatFile) then
  begin
  FOwner.FLogIntf.DoAddLog(Self, '批量导入 '+task.DatFile);
  name:= Q_ReplaceStr(task.DatFile, '\', '\\') ;
  sql := Format(SQL_LOAD_DATA,[name, task.TabName]);
  if 0 <> mysql_real_query(FLibHandle, PAnsiChar(sql), Length(sql)) then
  begin
  line := mysql_error(FLibHandle);
  FOwner.FLogIntf.DoAddLog(Self, line );
  end
  else
  begin
  FOwner.FLogIntf.DoAddLog(Self, sql+'.OK.');
  //导入成功才删除
  FOwner.FLogIntf.DoAddLog(Self, '删除文件 '+task.DatFile);
  DeleteFileA(PAnsiChar(task.DatFile));
  end;
  end;
引用 2 楼 wwwwb 的回复:

代码是什么

作者: pengderun   发布时间: 2011-06-01

代码是DELPHI写的

作者: pengderun   发布时间: 2011-06-01

引用 3 楼 pengderun 的回复:

路径没问题的,已经用'\\'替换掉'\'了,因为只是有时出错,有时可以导入的
有时出错有时成功??确定两次使用的方法都一模一样吧?如果是一样的,不大可能结果不一样,除非有什么别的因素干扰了,又或者除非MySQL有bug。

作者: Linkor   发布时间: 2011-06-01

Delphi(Pascal) code

      if FileExists(task.DatFile) then
      begin
        FOwner.FLogIntf.DoAddLog(Self, '批量导入 '+task.DatFile);
        name:= Q_ReplaceStr(task.DatFile, '\', '\\') ;
        sql := Format(SQL_LOAD_DATA,[name, task.TabName]);
        if 0 <> mysql_real_query(FLibHandle, PAnsiChar(sql), Length(sql)) then
        begin
          line  := mysql_error(FLibHandle);
          FOwner.FLogIntf.DoAddLog(Self, line );
        end
        else
        begin
          FOwner.FLogIntf.DoAddLog(Self, sql+'.OK.');
          //导入成功才删除
          FOwner.FLogIntf.DoAddLog(Self, '删除文件 '+task.DatFile);
          DeleteFileA(PAnsiChar(task.DatFile));
        end;
      end;

作者: pengderun   发布时间: 2011-06-01

方法确定是一样的,导入的SQL也是个常量,只要填入文件名和表名
引用 6 楼 linkor 的回复:

引用 3 楼 pengderun 的回复:

路径没问题的,已经用'\\'替换掉'\'了,因为只是有时出错,有时可以导入的
有时出错有时成功??确定两次使用的方法都一模一样吧?如果是一样的,不大可能结果不一样,除非有什么别的因素干扰了,又或者除非MySQL有bug。

作者: pengderun   发布时间: 2011-06-01

对了,Linkor,你前面的可能是中文路径的问题?路径确实有中文,但是问题是也有导入成功的。

作者: pengderun   发布时间: 2011-06-01

建议直接调试你的DELPHI程序,看看if 0 <> mysql_real_query(FLibHandle, PAnsiChar(sql), Length(sql)) then的时候sql变量的实际内容是什么 , 这样别人可以直接针对你的SQL语句进行分析修改,而不是分析你的DELIPH代码,毕竟懂MYSQL的未必熟悉DELPHI。

得到 这个 sql变量的实际内容 后,可以直接到MYSQL中测试一下,如果有错误则把错误信息一同贴出以供分析。

作者: ACMAIN_CHM   发布时间: 2011-06-01

引用 9 楼 pengderun 的回复:

对了,Linkor,你前面的可能是中文路径的问题?路径确实有中文,但是问题是也有导入成功的。
确定没有别的因素干扰?换个英文路径试试,找不到好方法的话都试试嘛。

作者: Linkor   发布时间: 2011-06-01

这个提议不错,先试试
引用 10 楼 acmain_chm 的回复:

建议直接调试你的DELPHI程序,看看if 0 <> mysql_real_query(FLibHandle, PAnsiChar(sql), Length(sql)) then的时候sql变量的实际内容是什么 , 这样别人可以直接针对你的SQL语句进行分析修改,而不是分析你的DELIPH代码,毕竟懂MYSQL的未必熟悉DELPHI。

得到 这个 sql变量的实际内容 后,可以直接到MYS……

作者: pengderun   发布时间: 2011-06-01

根据acmain_chm的提议测试结果:
导入失败记录的日志(括号中是SQL):
导入失败:(LOAD DATA LOCAL infile 'C:\\省标服务\\轨迹\\MyData\\gps_2011_06_01_103024_0001.txt' IGNORE into table gps_2011_06 lines terminated by '\r\n' )File 'C:\省标服务\轨迹\MyData\gps_2011_06_01_103024_0001.txt' not found (Errcode: 13)

把一个导入失败的SQL拿出来执行也没问题:Query OK,1024 rows affected(0.03 sec)

作者: pengderun   发布时间: 2011-06-01

C:\省标服务\轨迹\MyData\gps_2011_06_01_103024_0001.txt是否存在

更换为英文的目录名测试一下

LOAD DATA LOCAL infile 'C://省标服务//轨迹//MyData//gps_2011_06_01_103024_0001.txt' IGNORE into table gps_2011_06 lines terminated by '\r\n'
试试

作者: wwwwb   发布时间: 2011-06-01

'C:\\省标服务\\轨迹\\MyData\\gps_2011_06_01_103024_0001.txt' IGNORE into table gps_2011_06 lines terminated by '\r\n'
这个拿出来执行都没错的

作者: pengderun   发布时间: 2011-06-01

是LOAD DATA LOCAL infile 'C:\\省标服务\\轨迹\\MyData\\gps_2011_06_01_103024_0001.txt' IGNORE into table gps_2011_06 lines terminated by '\r\n'
复制少了一段

作者: pengderun   发布时间: 2011-06-01

我怀疑是不是LOAD DATA LOCAL INFILE的问题,这个好像是把本地文件传到MYSQL所在服务器进行导入?不过文件和MYSQL在同个服务器也会产生这种错误

作者: pengderun   发布时间: 2011-06-01

你将gps_2011_06_01_103024_0001.txT COPY到短目录名下,比如C:\TEMP
下,测试一下能否通过

作者: wwwwb   发布时间: 2011-06-01