2017-11-26 6 views
1

mysqlからcsvファイルにデータをエクスポートする必要があります。しかし、列の1つに改行があり、データをCSVファイルにエクスポートして改行を保存する必要があります。私は、次のSQLクエリを使用しています。この時点ではMySQLデータをCSVファイルにエクスポートするときに改行を保存するには?

select username, description from users into outfile '/tmp/test.csv' FIELDS ESCAPED BY '"' TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'; 

しかし、そのSQLクエリは、csvファイルに破断線を保存しません。私は、MySQLとの専門家ではないよ、誰かが私を助けることができれば、私は

答えて

1

感謝されると思いますが、このバグを打つように見える:https://bugs.mysql.com/bug.php?id=40320 バグは、私はちょうどテストした2008年以降に報告し、それはまだバグで発見されましたMySQL 8.0.3。

私はバグを回避このように動作することができます

SELECT username, REPLACE(description, '\n', '\\n') FROM users 
INTO OUTFILE '/tmp/test.csv' FIELDS ESCAPED BY '"' TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'; 

ファイルはリテラル\nテキスト(つまり、2つの文字である)でエクスポートされます。だから、データがロードされると、交換が逆転している必要があります。

LOAD DATA INFILE '/tmp/test.csv' INTO TABLE users 
FIELDS ESCAPED BY '"' TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' 
SET description = REPLACE(description, '\\n', '\n'); 

もちろんこれは、非常に優雅ではありませんが、それは、回避策です。

もう1つの選択肢は、エクスポートおよびインポートを行うアプリケーションを作成し、SELECT...INTO OUTFILEまたはLOAD DATA INFILEを使用しないことです。

+0

正常に機能しました。ご協力ありがとうございました! 10年後にバグが見つかるのは信じられないようです... –