5

よく知られたソースからタブ区切りファイルをダウンロードしましたが、それを MySQL テーブルにアップロードしたいと考えています。を使用してこれを行っていload data local infileます。

1,000 万件を超えるレコードがあるこのデータ ファイルには、多くのバックスラッシュという不幸もあります。

$ grep '\\' tabd_file.txt | wc -l
223212

これらのバックスラッシュは、フィールドの最後にある場合を除いて問題ありません。MySQL はバックスラッシュをエスケープ文字として解釈し、バックスラッシュがフィールドの最後に来ると、次のフィールド、または次の行を台無しにします。

これらのバックスラッシュにもかかわらず、MySQL をテーブルにロードするときに、MySQL から 6 つの警告しか受け取りませんでした。これらの各警告では、バックスラッシュが同じ行の 2 つの隣接するフィールドを連結しているため、行に適切な数の列が含まれていません。

私の質問は、これらのバックスラッシュをどのように処理するのですか? load data local infile [...] escaped by ''それらから特別な意味を取り除くように指定する必要がありますか? それとも、これは意図しない結果をもたらすでしょうか? このデータ ファイルでは、エスケープ シーケンスの重要な用途が 1 つも思い浮かびません。フィールドを終了する実際のタブは、「\t」シーケンスではなく「物理タブ」です。

または、load コマンドからエスケープ文字を削除するのは悪い習慣ですか? '\'ファイル内のすべてのインスタンスを に置き換えるだけ'\\'ですか?

アドバイスをありがとう:-)

4

1 に答える 1

18

エスケープが必要ない場合は、必ず ESCAPED BY '' を使用してください。

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

"FIELDS ESCAPED BY 文字が空の場合、エスケープ シーケンスの解釈は行われません。"

于 2013-03-28T15:00:41.510 に答える