Extra Backslash \ wenn SELECT ... IN OUTFILE ... in MySQL

8

Ich versuche also, eine MySQL-Tabelle in CSV zu exportieren. Ich verwende diese Abfrage:

%Vor%

Das gibt so etwas aus:

Ссылка

Das Problem dabei ist, dass es immer einen zusätzlichen Backslash gibt, wo es eine neue Zeile gibt, wie im Adressfeld.

CSV, das von phpMyAdmin exportiert wird, hat es jedoch nicht:

Ссылка

Jede Möglichkeit, SELECT ... OUTFILE zu machen ... macht dasselbe?

Die Tabelle, mit der ich es zu tun habe, hat 20 Millionen Datensätze, phpMyAdmin kann nur etwa 500.000 Datensätze für jede Exportaktion verarbeiten - oder es wird leer oder der mysql-Server ist weggegangen, usw.

    
datasn.io 11.03.2011, 01:43
quelle

5 Antworten

5

Versuchen Sie Folgendes:

%Vor%

Ich denke, das Problem ist, dass MySQL versucht Newline ('\ n') in Ihren Textfeldern zu umgehen, weil es Ihr Zeilenende ist.

  

FIELDS ESCAPED BY steuert, wie Sonderzeichen geschrieben werden. Wenn das FIELDS ESCAPED BY-Zeichen nicht leer ist, wird es als Präfix vor den folgenden Zeichen bei der Ausgabe verwendet:

     

Die FIELDS ESCAPED BY-Zeichen

     

Die Felder FIELDS [OPTIONALLY]

     

Das erste Zeichen der Werte FIELDS TERMINATED BY und LINES TERMINATED BY

     

ASCII NUL (das nullwertige Byte; was nach dem Escape-Zeichen geschrieben wird, ist ASCII "0", kein nullwertiges Byte)

( MySQL )

Ich verstehe nicht wirklich, warum es in Ihrem Fall tut, was es tut, aber ich konnte so etwas auf meinem Mac bekommen, und die obige Abfrage schien die Ausgabe in meinem Fall zu beheben.

Hoffe das hilft!

    
mattexx 11.03.2011, 07:50
quelle
4

Es sieht so aus, als ob es für einen MySql-Export unmöglich ist, sowohl Newlines als auch Zitate korrekt zu exportieren.

Beim Exportieren gibt MySql automatisch beide

frei
  • Feldtrennzeichen und
  • Zeilenbegrenzer

Standardmäßig ist das Escape-Zeichen ein umgekehrter Schrägstrich. Sie können dies überschreiben, indem Sie ESCAPED BY '' zu Ihrer Abfrage hinzufügen.

Leider möchten Sie in einer "normalen" (Excel-kompatiblen) CSV-Datei wahrscheinlich unterschiedliche Kodierungen für Zeilenumbrüche und Anführungszeichen verwenden. Insbesondere möchten Sie, dass Zeilenumbrüche nicht bearbeitet werden und dass die Anführungszeichen verdoppelt werden.

z. Wenn ein Wert eine neue Zeile wie folgt enthält:

  

Dies ist Zeile 1

     

Und das ist "Zeile 2", die Anführungszeichen enthält

sollte

werden
  

"Dies ist Zeile 1

     

Und das ist "" Zeile 2 "", die Anführungszeichen enthält "

Die Lösung, die ich gefunden habe, bestand darin, die Anführungszeichen vorzuspulen und ESCAPED BY '' (eine leere Zeichenkette) zu meiner Abfrage hinzuzufügen.

  

SELECT REPLACE (Feld1, '' ',' '' '),
      ERSETZEN (field2, '"', '"' '),
      ...
  VON ...
  WO ...   IN OUTFILE '/someFile.csv'
  FELDER TERMINIERT VON '', 'OPTIONAL GESCHLOSSEN VON' '' ENTWICKELT ''
  LINES TERMINIERT VON '\ n'

    
James Beninger 21.05.2013 17:39
quelle
1

Ich hatte das gleiche Problem, und ich fand heraus (nach dem Importieren der CSV-Datei in eine Tabelle), dass es in einigen Varchar-Feldern in der MySQL-Tabelle Zeilenumbrüche gab. Nach dem Löschen der Zeilenumbrüche funktionierte der Export korrekt.

    
Torsten 12.08.2011 19:10
quelle
0

Haben Sie eine Antwort hier Ссылка

Die wichtigsten Punkte sind:
1. IN OUTFILE soll Ergebnisse erzeugen, die durch LOAD DATA geladen werden können 2. Standardmäßig ist ESCAPED BY '\'
3. Um das Escaping zu deaktivieren, verwenden Sie ESCAPED BY ''

    
NoAngel 14.08.2017 06:19
quelle
-1

Versuchen Sie Folgendes:

%Vor%

Ich habe festgestellt, dass escaped by '\' make den Backslash für exportierte Ergebnisse entfernt.

    
Mosoti M. 26.08.2016 07:56
quelle

Tags und Links