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

インポートしたデータを2番目のステップで単純にトリミングするのはどうですか?

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

uがデータをロードした直後は、複雑すぎると思います
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 に答える