Mysql/MariaDB: Unerwünschte Tabs in Output


phwert

Erfahrenes Mitglied
#1
Hallo,

hat jemand eine Idee, wie man Tabs im Output vermeidet?
Ich versuche einen File im CSV-Format zu erstellen, und über die Daten hinaus werden immer noch Tabs mit ausgegeben.
Ist:
Code:
T1    ,    -    ,    -    ,    -    ,    Text abc    ,    Text cde    ,
T1    ,    -    ,    -    ,    -    ,    Text abc    ,    Text cde    ,
T1    ,    -    ,    -    ,    -    ,    Text abc    ,    Text cde    ,
T1    ,    -    ,    -    ,    -    ,    Text abc    ,    Text cde    ,
T1    ,    -    ,    -    ,    -    ,    Text abc    ,    Text cde    ,
Soll:
Code:
T1,-,-,-,Text abc,Text cde,
T1,-,-,-,Text abc,Text cde,
T1,-,-,-,Text abc,Text cde,
T1,-,-,-,Text abc,Text cde,
T1,-,-,-,Text abc,Text cde,
Anmeldung erfolgt mit der Option "--silent".

Gruß
 

Yaslaw

n/a
Moderator
#2
Nimm sie aus dem Code raus.

Ich weiss, diese Aussage ist absolut nicht hilfreich. Aber mehr kann ich dir nicht sagen ohne zu wissen wie du denn das CSV erstellst. MySQL hat mWn keine direkte Export2Csv Funktion.
 

phwert

Erfahrenes Mitglied
#3
Da sind keine drin. :)
MySQL hat mWn keine direkte Export2Csv Funktion.
Jein, Lösung nachfolgend.

Inzwischen bin aber fündig geworden:
SELECT INTO OUTFILE writes the resulting rows to a file, and allows the use of column and row terminators to specify a particular output format. The default is to terminate fields with tabs (\t) and lines with newlines (\n).
SELECT INTO OUTFILE
Weiter unten kann man lesen, wie man die Felder anders als mit Tabs terminieren kann. Dazu muss das Select etwas umgeschrieben werden.
Code:
Select field1, field2...
INTO OUTFILE 'meinFile.csv'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
from table where ...
Man sollte denken, nun klappt es, aber denkste:
ERROR 1290 (HY000): The MariaDB server is running with the --secure-file-priv option so it cannot execute this statement
Ich habe daraufhin den Pfad von secure_file_priv in my.cnf in den Pfad geändert, wo ich arbeite.
Code:
# Operations 'LOAD DATA', 'SELECT ... INTO' and 'LOAD FILE()' will only
# work with files in the specified directory
secure_file_priv = /Mein/Pfad     #/var/lib/mysql-files
Aber das bringt nichts.
Wenn ich die Option secure_file_priv ausschalte (# davor), wird der File zwar generiert, liegt dann aber unter /var/lib/mysql/datenbankname und benötigt root-Rechte.
Immerhin, es klappt, ist aber ziemlich umständlich. Da ist es einfacher die Tabs im File nach Generierung zu ersetzen.
 
Zuletzt bearbeitet:

phwert

Erfahrenes Mitglied
#5
Hast du nen voll qualifizierten Pfad versucht?
"...blablabl INTO OUTFILE '/home/phwert/Dokumente/mein.csv' ...blablabl..."
Nein, der Pfad wurde ja in secure_file_priv angegeben.
Nach dem Hinweis habe es allerdings noch einmal mit Pfadangabe versucht, und zick, nachdem ich dem User mysql Schreibberechtigung für das Verzeichnis eingeräumt habe, klappte es dann mit aktiviertem secure-file-priv und /Mein/Pfad sowie deaktiviertem secure-file-priv.
 
Zuletzt bearbeitet:

Zvoni

Erfahrenes Mitglied
#7
Mach doch nen UNION von 2 SELECTS, wo du dann nur im zweiten SELECT den ORDER BY nimmst

EDIT: Upps, hab gerade gesehen, dass das die vorgschlagene Lösung in deinem Link ist

EDIT2: Hast du das zweite SELECT (inkl. ORDER BY) mal in Klammern gesetzt?