0

27797 行の大きな csv ファイルを MySQL にインポートしようとしています。これが私のコードです:

load data local infile 'foo.csv' into table bar fields terminated by ',' enclosed by '"' lines terminated by '\n' ignore 1 lines;

それは正常に動作します。ただし、このファイルの一部の行にはバックスラッシュ ( \) が含まれています。次に例を示します。

"40395383771234304","403931565666585344","84996340","","","2011-02-23 12:59:44 +0000","引力波宇宙广播系统零号控制站","@woiu 太好了"
"40395151830421504","40392270645563392","23063222","","","2011-02-23 12:58:49 +0000","引力波宇宙广播系统零号控制站","@wx0确切地讲安全電圧は\""36V以下\""ではありません\""36V\"", 呵呵. 话说要どのように才能测它的電圧呢?"
"40391869477158912","40390512645124096","23063222","","","2011-02-23 12:45:46 +0000","引力波宇宙广播系统零号控制站","@wx0 これが正しい人の測定結果、我没了。非麻麻の感が存在し、電器の前置き USB インターフェースの充満電量よりも充電器を使用した感電能」

"15637769883","15637418359","35192559","","","2010-06-07 15:44:15 +0000","强互作用力宇宙探测器","@Hc95 就那不是DOS $ adb push d:\hc95.tar.gz /tmp/ $ adb pull /system/hc95/eyes d:\re\"

インポート後、バックスラッシュのある行は改行されます。

どうすれば修正できますか?sedorを使用して、awkすべて(27797 行以内...) に置き換える必要がありますか? または、これは SQL クエリを変更するだけで修正できますか?\\

4

2 に答える 2

0

これは、直接的な答えというよりも、議論のほうが少し多いです。最終データ (DB 内) の値の途中に二重引用符が必要ですか? マンジするデータが大量にあるという事実は、まったく問題を引き起こしません。

"" は、文字列内の引用符に対して Oracle が行うことです。そのファイルを作成したものは何でも、引用シーケンスをエスケープしようとしたと思います。 MySQLの文字列マニュアルですこれらのいずれかが有効です::

select "hel""lo", "\"hello";

インポートとは別に編集を行う傾向があるため、作業がうまくいったかどうかを簡単かつ迅速に確認できます。テキスト ファイルが 10 MB 未満の場合、sed.

sed -e 's/\\//' foo.csv

コメントから、エスケープ文字を '\' 以外に設定できます。

ESCAPED BY 'char'

これは、ローダーが逐語的に値を追加する必要があることを意味します。複雑すぎる場合は、挿入する前にデータを base64() すると、ツールが UTf8 シーケンスを壊すのを防ぐことができます。

于 2013-08-23T14:40:23.837 に答える