2009-05-19 16 views
1

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

ファイルのソースを介して、私たちはそこに書式を変更することはできませんので、私はfields-optionally-enclosed-byスイッチを削除しようとしましたが、値を囲む二重引用符がインポートされます。フィールド値の二重引用符をエスケープするためにグローバル検索と置き換えられたと考えられていますか?それとも、他のフィールドを引用符で囲んでもよい提案?

答えて

1

引用符(フィールドはオプションで囲まれたスイッチが削除されます)でインポートしてから、値が最初と最後に二重引用符を含む場合はチェックを実行できます)そして、最初から1文字切り捨てて、読み込み時に余分な引用符を取り除いてください。

編集:kekoavの応答を読んだ後、インポートする前にファイルを操作することができればそれはもっと賢明な選択肢になりますが、後で引用符を削除する必要がある場合は、 「テーブル」内のすべての「列」

1

ため

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

あなたのデータは何とか、あなたが問題を持っていることを区切ることなく、フィールドの引用の体の内部に引用符を含めている場合。 mysqlimportがこれを正しく行うことを保証することはできません。

このように挿入する前にデータをマッサージしてください。

幸いなことに、タブ区切りです。したがって、正規表現を実行して引用符を区切り記号に置き換えて、区切り文字をmysqlimportに伝えることができます。

関連する問題