13 Stimmen

MySQL: CSV Export als auf dem Server gespeicherte Datei

Tutorial von Stefan Trost | 01.08.2011 um 15:14

In dieser Info zeige ich, wie man eine MySQL Tabelle in eine CSV Datei abspeichern kann, die dann auf dem Server abgespeichert wird. Möchten Sie die CSV-Datei lieber als automatisch startender Download haben, sollten Sie in dieses Tutorial schauen.

Was vielen nicht bewusst ist: Für den Export als Datei hält MySQL bereits eine Abwandlung des normalen SELECT Befehls bereit:

SELECT * 
  INTO OUTFILE 'test.csv'
  FIELDS
    TERMINATED BY ';'
    OPTIONALLY ENCLOSED BY '"'
  LINES
    TERMINATED BY '\r\n'
  FROM tabelle 
  WHERE 1

Die Anweisungen von SELECT, FROM und WHERE unterscheiden sich hier nicht von einer normalen MySQL SELECT Anfrage. Hinter SELECT kann man ganz normal die Felder angeben, die exportiert werden sollen. Im Beispiel benutzen wir *, um alle Felder der Tabelle zu exportieren. Hinter FROM geben wir wie gewohnt die Tabelle an, die exportiert werden soll und hinter dem WHERE können wir wie bei einem normalen SELECT auch Bedingungen dafür definieren, welche Spalten exportiert werden sollen. Mit "WHERE 1" exportieren wir die komplette Tabelle, man kann dies aber auch weglassen.

Unterschied zum normalen SELECT

Interessant wird es, wenn wir uns die Unterschiede zu einem normalen SELECT ansehen: Der Unterschied ist das, was hinter "INTO OUTFILE" kommt. Wir schauen uns die Befehle einmal im Detail an:

INTO OUTFILE

Hinter diesem Befehl notieren wir die Datei, in die die Ausgabe erfolgen soll. Im Beispiel benutzen wir die Datei "test.csv". Die Datei wird auf dem Computer gespeichert, auf dem auch die Datenbank liegt. Benutzen wir XAMPP, wird der Speicherort zum Beispiel "C:\xampp\mysql\data" sein. 

Schwieriger wird es, wenn wir bei einem Shared Hoster sind und keinen eigenen Server besitzen. Dann wird sich der Computer auf dem die Datenbank liegt unter Umständen von dem Webspace unterscheiden. 

Wir können aber die PHP Funktion getcwd() benutzen, um den absoluten Pfad unseres Webspaces herauszufinden und dann ausprobieren, direkt in diesem Pfad zu speichern. Zum Beispiel kann das im Falle von XAMPP "INTO OUTFILE 'c:/xampp/htdocs/seitex/test.csv'" sein. Wenn das nicht funktioniert, können wir immer noch eine CSV Datei mit PHP erzeugen. Wichtig: MySQL wird keine existierende Datei überschreiben, die Datei darf noch nicht existieren, damit es funktioniert.

FIELDS

Hinter FIELDS notieren wir, nach welchen Regeln die Felder der CSV Datei formatiert werden sollen:

TERMINATED BY

Gibt das Trennzeichen an, mit dem die einzelnen Felder getrennt sind. Es bietet sich hier das Semikolon ";" wie im Beispiel oder das Komma "," an.

OPTIONALLY ENCLOSED BY

Falls ein Feld unser Trennzeichen enthält, würd die Ordnung der CSV Datei durcheinander geraten. Deswegen geben wir hier ein Zeichen wie " an, mit dem die Felder umschlossen werden. So ergibt sich zum Beispiel: "Wert 1","Wert 2","Wert 3" und so weiter. Lassen wir das "OPTIONALLY" weg, wird jedes Feld mit mit dem Zeichen eingerahmt, schreiben wir das "OPTIONALLY", wird nur eingerahmt wenn nötig. Zahlen bleiben dann zum Beispiel als Zahlen ohne Anführungszeichen stehen.

LINES TERMINATED BY

Auch was die Zeilen angeht können wir bestimen, womit einzelne Zeilen der CSV Datei getrennt werden sollen. Im Beispiel benutzen wir den Zeilenumbruch von Windows "\r\n". Man kann aber auch jeden anderen Trenner angeben oder den Befehl ganz weglassen.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.