LOAD DATA INFILE について約 4500 の質問がありますが、特定の問題に対処するものは見つかりませんでした。
CSV ファイルを MySQL データベースにアップロードするユーザーがいます (私はバックエンドで LOAD DATA INFILE スクリプトを使用しています)。フィールドには、消去する必要がある間抜けな文字が含まれていることがあります。具体的には、スペース、CR、および LF です。
LOAD クエリは次のとおりです。
LOAD DATA LOCAL INFILE '".$csvfile."' INTO TABLE table_name FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES
(@dummy,Field2,Field3,Field4)
SET Field1 = (SELECT ID FROM table_a WHERE Username = 'foo');
コードは問題なく動作します。やりたいことは、ジャンク文字が含まれている可能性のある入力フィールドをクリーンアップすることだけです。REPLACE を使用して SET 行のクリーンアップを簡単に実行できると思います ...これは本当ですか?
SET Field1 = (SELECT ID FROM table_a WHERE Username = 'foo'), REPLACE(Field2,'\r\n','');
私が持っていた別のアイデアは、後続のクエリでこれを処理することでした:
$trimQuery = "UPDATE table_name SET Field2 = TRIM(Field2), Field2 = REPLACE(Field2,'\r\n','')";
だから私の質問は4つです:
- ジャンク文字が見つからない場合、入力が壊れますか?
- スペースもトリミングしたい場合はどうすればよいですか?
- 「\r」しかない場合、スキップされるか失敗しますか?
- どういうわけか正規表現を使用するより良い方法はありますか?
ありがとう!!