Wie gehe ich mit NULL-Werten in einer mysql SELECT ... OUTFILE-Anweisung in Verbindung mit FIELDS ESCAPED BY? NULL-Werte werden derzeit abgeschnitten

9

Ich stoße bei der Verwendung von SELECT ... OUTFILE von MySQL auf Ergebnismengen, die sowohl Nullwerte als auch Spalten enthalten, die ein doppeltes Anführungszeichen benötigen (dh Spalten, die Zeichen enthalten), die Outfilesyntax, die ich bin mit:

%Vor%

Mein Problem betrifft den FIELDS ESCAPED BY-Teil der Abfrage - wenn dieser Teil weggelassen wird, werden NULL-Werte korrekt exportiert (..., "\ N", ... ist, wie es in der CSV aussieht) .

Spalten mit doppelten Anführungszeichen werden jedoch in Excel in mehrere Zeilen / Spalten aufgeteilt. Dies liegt daran, dass Excel erfordert, dass "" -Zeichen innerhalb von Spalten mit Escape-Zeichen versehen werden, indem sie als "" "'geschrieben werden.

Durch die Aufnahme der FIELDS ESCAPED BY-Klausel wird das Excel-Problem mit Spalten mit doppelten Anführungszeichen behoben, es werden jedoch NULL-Spalten abgebrochen. NULL-Spalten werden als (... "N, ...) exportiert, wobei sowohl der umgekehrte Schrägstrich als auch das nachfolgende Anführungszeichen in der Spalte fehlen. In Excel führt dies dazu, dass mehrere Spalten aufgrund des Fehlens eines Schlussangebots ineinander übergehen.

Mein Ziel ist es, Spalten zu exportieren, die doppelte Anführungszeichen und Zeilenumbrüche enthalten, sowie Null-Spalten als \ N zu exportieren, aber ich kann nicht herausfinden, wie es geht. MySQL-Dokumente geben an, dass FIELDS ESCAPED BY beeinflusst, wie NULL-Spalten ausgegeben werden, aber ich kann nicht herausfinden, wie eine Escape-Sequenz von '' '' dazu führt, dass der umgekehrte Schrägstrich und das nachfolgende Anführungszeichen auf eine NULL-Spalte fallen

Gegenwärtig besteht meine Lösung darin, in jeder Zeile einen Zeichenersetzungstext auszuführen, wenn ich ihn an den Benutzer ausgabe, indem ich FIELDS ESCAPED BY benutze und "" N "durch" \ N "," ersetze. aber es fühlt sich nicht richtig an, und ich habe Angst davor, dass es auf der ganzen Linie Probleme gibt.

IFNULL () für die Select-Spalten ist möglicherweise eine Option, aber die Art und Weise, wie wir dies in unserem Code verwenden, ist tatsächlich ziemlich schwierig zu implementieren. Es muss auch für jede Spalte gemacht werden, die möglicherweise NULL-Werte haben könnte, also ist es eine Lösung, die ich vermeiden möchte, wenn ich kann

Danke!

    
Kevin Jhangiani 04.01.2011, 03:25
quelle

2 Antworten

1

Verwenden Sie coalesce function, um die Spalte, die null sein kann, in "" zu konvertieren. Ссылка

    
Cesar 04.01.2011 10:28
quelle
0

Ich konnte MySQL-Abfrageergebnisse erfolgreich als CSV speichern und wie folgt in Excel importieren:

  1. Benutze das Formular ...

    %Vor%

... für jede Spalte oder jeden Ausdruck in Ihrer SELECT-Anweisung, als möglicherweise einen NULL (\ N) zurückgeben kann. Dies stellt sicher, dass NULL-Werte in Ihrer CSV-Datei als korrekt in Anführungszeichen gesetzte leere Zeichenfolgen statt unsachgemäß zitierten \ N-Zeichen angezeigt werden. Anstelle einer leeren Zeichenfolge könnten Sie möglicherweise einen Wert angeben, der eine NULL darstellt, z. B. ...

%Vor%
  1. Verwenden Sie die folgenden OUTFILE-Optionen:

%Vor%

Beachten Sie, dass ESCAPED BY ein doppeltes Anführungszeichen angibt, ebenso wie ENCLOSED BY. Ich habe nicht getestet, ob OPTIONALLY ENCLOSED BY erfolgreich sein wird, also lasse ich OPTIONAL einfach aus.

Das Verwenden eines doppelten Anführungszeichens, um ein anderes double-quote innerhalb eines in Anführungszeichen gesetzten Feldwerts zu umgehen, ist gemäß der CSV-Spezifikation erforderlich - RFC 4180, Abschnitt 2.7.

    
MikeOnline 09.11.2015 21:20
quelle

Tags und Links