4

在我的代码中,我有一个如下所示的查询:

$load_query = "LOAD DATA LOCAL INFILE '{$file}' INTO TABLE `{$table}`
      FIELDS TERMINATED BY ',' ENCLOSED BY '\"';";

这是我尝试加载的文件中包含的示例行:

"MC318199","06160","1","P","00750","00000","TN598792","04/16/2009","91X"                 

您会注意到在示例行的末尾有很多空格。这些空格都出现在终止该行的换行符“\n”之前。问题是这些空间被输入到数据库中。

运行命令时如何删除额外的空格LOAD DATA INFILE?有没有办法使用RTRIM

编辑

正如ajreal建议的那样,我必须重新准备文件。文件准备好后,它已正确插入数据库。我修改了位于http://gabeanderson.com/2008/02/01/unixlinux-find-replace-in-multiple-files/的 bash 脚本来完成此操作。代码如下所示:

#!/bin/bash 
for fl in *.txt; do
  mv $fl $fl.old
  sed 's/[ \t]*$//' $fl.old > $fl
  rm -f $fl.old
done
4

4 回答 4

10
$load_query = "LOAD DATA LOCAL INFILE '{$file}' INTO TABLE `{$table}`
      FIELDS TERMINATED BY ',' ENCLOSED BY '\"' (col1, col2, ... , @col_with_spaces)
SET col_with_spaces = RTRIM(@col_with_spaces);";

这样您就不需要预处理文件,也不需要在表上创建其他更新。

于 2013-04-08T17:57:47.767 回答
2

在第二步中简单地修剪导入的数据怎么样?

$fix_query = "UPDATE `{$table}` SET LastFieldName = RTRIM(LastFieldName);";
于 2010-11-12T07:14:09.127 回答
2

没想到太复杂了,就在你加载数据之后
update $table set $last_column=rtrim($last_column);

vi或使用(或任何编辑器)手动删除 $file 中的空间

或重新准备 $file

于 2010-11-12T07:16:42.527 回答
1

利用LINES TERMINATED BY '\n'

$load_query = "LOAD DATA LOCAL INFILE '{$file}' INTO TABLE `{$table}`
      FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n' " ;
于 2010-11-12T07:18:19.393 回答