Mysql:如何在LOAD DATA INFILE查询中使用RTRIM?

jer*_*ome 2 mysql csv load-data-infile

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

$load_query = "LOAD DATA LOCAL INFILE '{$file}' INTO TABLE `{$table}`
      FIELDS TERMINATED BY ',' ENCLOSED BY '\"';";
Run Code Online (Sandbox Code Playgroud)

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

"MC318199","06160","1","P","00750","00000","TN598792","04/16/2009","91X"                 
Run Code Online (Sandbox Code Playgroud)

您会注意到在示例行的末尾有相当多的空格.这些空格都出现在终止该行的新行字符"\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
Run Code Online (Sandbox Code Playgroud)

cro*_*lla 7

$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);";
Run Code Online (Sandbox Code Playgroud)

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

  • 这发生在插入之前 (2认同)