1

タブ区切りの大きなテキスト ファイル (約 120,000 レコード、50 MB) があり、mysqlimport を使用して MySQL に押し込もうとしています。二重引用符で囲まれているフィールドと、そうでないフィールドがあります。スイッチを使用していますfields-optionally-enclosed-by='\"'が、一部のフィールド値自体に二重引用符 (インチを示す) が含まれているため、区切られたフィールド値が "ABCDEF19" のようなものである可能性があります。

ファイルのソースを制御できないため、そこでフォーマットを変更することはできません。スイッチを削除しようとしましたfields-optionally-enclosed-byが、値を囲む二重引用符がインポートされます。

彼は、値に引用符を付けてレコードを作成すると、ひどく混乱しています。一部のフィールドはオプションで引用符で囲まれているが、引用符が含まれている可能性があることを mysqlimport に伝える方法はありますか? フィールド値の二重引用符をエスケープするために、おそらくグローバル検索と置換を考えましたか? または他の提案はありますか?

4

2 に答える 2

1

引用符を付けてインポートし(fields-optional-enclosed-byスイッチを削除)、値の先頭と末尾に二重引用符があるかどうかを確認してから(値の先頭にインチがない場合)、切り捨てますインポートから得た余分な引用符を削除するために、最初と最後から 1 文字。

編集: kekoav の応答を読んだ後、インポートする前にファイルを操作できる場合ははるかに賢明なオプションであることに同意する必要がありますが、後で引用符を削除する必要がある場合は、次のようなものを使用できます。

UPDATE table 
SET column = 
IF(
STRCMP(LEFT(table.column,1),'"'),
MID(table.column,2,(LENGTH(table.column)-2)),
table.column
)

「テーブル」のすべての「列」に対して

于 2009-05-19T21:08:56.407 に答える
1

データがフィールド引用の本文内に何らかの形で区切ることなく引用符を含んでいる場合、問題があります。mysqlimport がこれを適切に行うことを保証することはできません。

この方法でデータを挿入する前に、まずデータをマッサージしてください。

幸いなことに、これはタブ区切りであるため、正規表現を実行して引用符を区切られたバージョンに置き換え、mysqlimport に区切り文字を伝えることができます。

于 2009-05-19T21:09:56.890 に答える