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

标签 mysql csv load-data-infile

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

$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 所建议的,我必须重新准备文件。文件准备好后,它被正确地插入到数据库中。我修改了位于以下位置的 bash 脚本:http://gabeanderson.com/2008/02/01/unixlinux-find-replace-in-multiple-files/来完成这个。代码如下所示:

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

最佳答案

$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);";

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

关于Mysql:如何在我的 LOAD DATA INFILE 查询中使用 RTRIM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4162362/

相关文章:

mysql - 有人让 mysql workbench 5.2 与 mamp 一起工作吗?

csv - .导入CSV到sqlite3数据库

PHP 和 Ajax : Impossible to execute LOAD DATA LOCAL INFILE (mysql) from Ajax call

sql-server - 使用 SSIS 将不同的 csv 文件加载到不同的 SQL Server 表中的最佳方法是什么?

php - 从 csv php 创建键值对

MySQL:启用 LOAD DATA LOCAL INFILE 重置

php - 需要国家/地区-州/城市数据库

mysql - 如何合并不同列中具有不同值的两行

MYSQL如何选择单价之一