CSV-zu-SQLkonverter

Anleitung · 8 Min. Lesezeit

CREATE TABLE aus CSV generieren: Spalten und Datentypen automatisch

CREATE TABLE aus CSV generieren: So entstehen aus den Spalten einer CSV-Datei automatisch passende SQL-Datentypen. Mit Beispiel, Schritt-für-Schritt-Anleitung und ehrlichen Hinweisen, kostenlos und ohne Upload.

Jan-Tristan Rudat
Jan-Tristan Rudat Veröffentlicht Geprüft

Kurz gesagt

Ein CREATE TABLE aus CSV entsteht, indem die erste Zeile zu Spaltennamen wird und die Werte jeder Spalte auf einen passenden SQL-Datentyp geprüft werden. Unser Tool macht das automatisch für MySQL, PostgreSQL, SQLite und SQL Server, zeigt den erkannten Typ pro Spalte an und arbeitet lokal im Browser ohne Upload. Die Typ-Erkennung ist eine Heuristik: Prüfen Sie Spalten wie Postleitzahlen kurz und setzen Sie sie im Zweifel auf TEXT.

Was bedeutet CREATE TABLE aus CSV?

Eine CSV-Datei ist im Grunde schon eine Tabelle: Die erste Zeile enthält die Spaltenüberschriften, jede weitere Zeile ist ein Datensatz, und die Spalten sind durch ein Trennzeichen getrennt. Eine relationale Datenbank braucht aber mehr als nur diese Rohstruktur. Bevor Sie Daten einfügen können, muss die Tabelle in der Datenbank existieren, und zwar mit klaren Spaltennamen und einem festgelegten Datentyp je Spalte. Genau das leistet das CREATE TABLE-Statement in SQL.

Ein CREATE TABLE aus CSV zu generieren bedeutet also, aus der reinen Textstruktur der CSV ein vollständiges Tabellenschema abzuleiten. Aus der Kopfzeile name,alter,registriert wird eine Tabelle mit drei Spalten, und für jede dieser Spalten wird ein passender Typ bestimmt, etwa VARCHAR für den Namen, INTEGER für das Alter und DATE für das Registrierdatum. Manuell ist das bei wenigen Spalten schnell erledigt, bei breiten Tabellen mit dreißig oder mehr Feldern wird es schnell mühsam und fehleranfällig. Ein Generator nimmt Ihnen diese Fleißarbeit ab und schlägt für jede Spalte einen sinnvollen Typ vor.

Der Begriff CREATE TABLE gehört zum sogenannten DDL-Teil von SQL, der Data Definition Language. DDL beschreibt die Struktur einer Datenbank, also welche Tabellen es gibt und wie deren Spalten aussehen. Das Gegenstück ist die Data Manipulation Language mit Befehlen wie INSERT, die die eigentlichen Daten füllen. Wenn Sie tiefer in die Grundlagen einsteigen wollen, lohnt sich vorab der Ratgeber Was ist SQL?.

In 3 Schritten zum CREATE TABLE

Mit unserem CSV-zu-SQL-Konverter erzeugen Sie das Statement ohne Installation und ohne Konto. Das Tool läuft vollständig im Browser, ist kostenlos und ohne Limit nutzbar. So gehen Sie vor:

  1. CSV einfügen oder Datei wählen: Kopieren Sie Ihre Daten in das Eingabefeld oder wählen Sie eine .csv-Datei von Ihrem Gerät. Lassen Sie die Option für die Kopfzeile aktiv, damit die erste Zeile als Spaltennamen verwendet wird. Stimmt das automatisch erkannte Trennzeichen nicht, stellen Sie es manuell auf Komma, Semikolon, Tab oder Pipe.
  2. Dialekt wählen und Typen prüfen: Schalten Sie oben den Ziel-Dialekt um. Das Tool analysiert jede Spalte und zeigt den erkannten Datentyp als kleine Badge an. Werfen Sie hier kurz einen Blick auf Spalten, die nur aus Ziffern bestehen, etwa Postleitzahlen oder Artikelnummern.
  3. CREATE TABLE übernehmen: Kopieren Sie das fertige Statement mit dem Kopieren-Button oder laden Sie es als .sql-Datei herunter. Auf Wunsch hängt das Tool gleich die passenden INSERT-Statements an, sodass Sie ein komplett lauffähiges Skript erhalten.

Den umgekehrten Schwerpunkt, also vor allem die Datenzeilen, behandelt der Ratgeber INSERT-Statements aus CSV erzeugen. Beides zusammen ergibt ein vollständiges Importskript.

Wie die Datentypen automatisch erkannt werden

Der spannendste Teil bei der Generierung ist die Typ-Inferenz, also das automatische Ermitteln des passenden Datentyps. Das Tool betrachtet dazu nicht nur eine Zelle, sondern alle nicht leeren Werte einer Spalte und sucht den engsten Typ, der zu wirklich jedem dieser Werte passt. Die Reihenfolge ist dabei vom speziellen zum allgemeinen Typ:

  • BOOLEAN: wenn alle Werte aus einer kleinen Menge wie true, false, 0, 1, ja oder nein stammen.
  • INTEGER: wenn alle Werte ganze Zahlen ohne führende Null sind, etwa 0, 42 oder -7.
  • Dezimalzahl (REAL): wenn alle Werte Zahlen mit Nachkommastellen sind. Ein deutsches Dezimalkomma wie 19,99 wird erkannt und intern auf einen Punkt normalisiert.
  • DATE: nur bei eindeutigem ISO-Datum wie 2024-12-31, optional mit Uhrzeit. Das ist bewusst konservativ.
  • TEXT beziehungsweise VARCHAR: in allen anderen Fällen, also der sichere Auffangtyp.

Entscheidend ist das Prinzip, dass ein einziger abweichender Wert die ganze Spalte auf den allgemeineren Typ kippt. Enthält eine Spalte ansonsten lauter Zahlen, aber in einer Zeile steht k.A., dann ist die ganze Spalte kein INTEGER mehr, sondern TEXT. Das ist gewollt, denn nur so passt der Typ garantiert zu jeder Zeile, und der spätere Import scheitert nicht an einem Ausreißer. Leere Zellen sind ein Sonderfall: Sie zählen als NULL und kippen den Typ nicht. Sie sorgen aber dafür, dass die Spalte als NULL-bar markiert wird, also nicht NOT NULL.

Wie das Tool deutsche Datumsformate, Tausenderpunkte und ähnliche Stolpersteine behandelt, vertieft der Ratgeber Datentypen aus CSV richtig erkennen.

CREATE TABLE Beispiel mit echten Daten

Ein konkretes CREATE TABLE Beispiel macht den Vorgang greifbar. Nehmen wir eine kleine CSV mit Kundendaten:

id,name,umsatz,aktiv,registriert
1,Müller GmbH,1299.90,ja,2024-01-15
2,Schmidt KG,499.00,nein,2024-03-02
3,Weber AG,15000.50,ja,2024-05-21

Das Tool liest die erste Zeile als Spaltennamen und prüft jede Spalte. id enthält nur ganze Zahlen, wird also INTEGER. name ist Text, wird VARCHAR. umsatz hat Nachkommastellen, wird eine Dezimalzahl. aktiv besteht nur aus ja und nein, wird BOOLEAN. registriert passt zum ISO-Datum, wird DATE. Da in diesem Beispiel keine Zelle leer ist, dürfen alle Spalten NOT NULL sein. Für PostgreSQL sieht das erzeugte Statement so aus:

CREATE TABLE "kunden" (
  "id" INTEGER NOT NULL,
  "name" VARCHAR(20) NOT NULL,
  "umsatz" DOUBLE PRECISION NOT NULL,
  "aktiv" BOOLEAN NOT NULL,
  "registriert" DATE NOT NULL
);

Beachten Sie die Länge VARCHAR(20): Das Tool misst die längste Zeichenkette der Spalte und rundet auf eine sinnvolle Größe auf, statt pauschal eine riesige Länge zu reservieren. Bei sehr langen Texten weicht es auf TEXT aus. Der Tabellenname ist frei wählbar, standardmäßig leitet das Tool ihn aus dem Dateinamen ab oder verwendet daten.

Dieselbe Tabelle in vier SQL-Dialekten

Ein CREATE TABLE ist nicht in jeder Datenbank gleich. Typnamen, das Zitieren von Spaltennamen und die automatischen Schlüssel unterscheiden sich. Genau deshalb hat unser Tool einen Dialekt-Umschalter. Die folgende Tabelle zeigt die wichtigsten Unterschiede für unser Beispiel:

Dialekt Quoting Dezimalzahl Boolean
MySQL / MariaDB Backticks DOUBLE TINYINT(1)
PostgreSQL Doppelte Anführungszeichen DOUBLE PRECISION BOOLEAN
SQLite Doppelte Anführungszeichen REAL INTEGER (0/1)
SQL Server Eckige Klammern FLOAT BIT

In MySQL hieße die Spalte für unser Beispiel also `umsatz` DOUBLE, in SQL Server dagegen [umsatz] FLOAT. Auch der Datumstyp variiert: SQLite kennt keinen eigenen DATE-Typ und speichert Daten als TEXT im ISO-Format, während SQL Server DATETIME2 verwendet. Diese Feinheiten müssen Sie nicht auswendig kennen, das Tool setzt sie korrekt ein. Welcher Dialekt für Ihr Projekt der richtige ist, beleuchtet der Ratgeber MySQL, PostgreSQL, SQLite oder SQL Server.

Spaltennamen, Schlüssel und NULL

Aus einer CSV-Kopfzeile lassen sich nicht alle Texte ungeprüft als Spaltennamen übernehmen. Eine Überschrift wie Umsatz in EUR enthält Leerzeichen, und ein Name wie order ist in SQL ein reserviertes Wort. Das Tool normalisiert deshalb jeden Namen zu einem gültigen Identifier: Leerzeichen und Sonderzeichen werden zu Unterstrichen, eine führende Ziffer bekommt ein Präfix, und doppelte Namen werden eindeutig gemacht. Zusätzlich werden die Namen dialektgerecht zitiert, also in Backticks, Anführungszeichen oder eckige Klammern gesetzt. So sind selbst Spalten, die ein reserviertes Wort heißen, sicher.

Ein häufiger Wunsch ist ein Primärschlüssel. Viele CSV-Dateien bringen keine eindeutige ID mit. Über eine Option ergänzt das Tool eine automatisch hochzählende ID-Spalte, je nach Dialekt als AUTO_INCREMENT in MySQL, SERIAL in PostgreSQL, AUTOINCREMENT in SQLite oder IDENTITY(1,1) in SQL Server. Das ist praktisch, wenn jede Zeile später eindeutig referenzierbar sein soll.

Beim Thema NULL entscheidet allein, ob eine Spalte leere Zellen enthält. Ist auch nur eine Zelle leer, lässt das Tool die Spalte NULL-bar, weil ein NOT NULL sonst beim Einfügen der leeren Werte scheitern würde. Sind alle Zellen einer Spalte gefüllt, darf optional NOT NULL gesetzt werden. Eine leere Zelle wird übrigens bewusst zu einem echten NULL und nicht zu einem leeren Text, das ist der saubere Weg in einer Datenbank.

Grenzen der automatischen Erkennung

Ehrlichkeit gehört zu einem guten Werkzeug. Die Typ-Inferenz ist eine Heuristik, kein perfekter Datenbankarchitekt. Sie liegt in den meisten Alltagsfällen richtig, in einigen Situationen sollten Sie aber selbst nachsteuern:

Stolperstein Empfehlung
Postleitzahl 01067 wird INTEGER Spalte auf TEXT setzen, führende Null bleibt erhalten
Telefonnummer mit +49 oder Klammern als TEXT behandeln, nicht als Zahl
Datum 31.12.2024 (deutsches Format) wird bewusst TEXT, nicht DATE, da nicht ISO
Betrag 1.234,56 mit Tausenderpunkt mehrdeutig, Typ prüfen oder Daten bereinigen

Genauso wichtig: Das Tool erzeugt eine flache Einzeltabelle. Es erkennt keine Fremdschlüssel zwischen mehreren CSV-Dateien, setzt keine UNIQUE- oder CHECK-Regeln und legt keine Indizes an. Über NULL beziehungsweise NOT NULL und einen optionalen Auto-Increment-Schlüssel hinaus gibt es keine Constraints. Für einen ersten, lauffähigen Import ist das genau richtig, ein durchdachtes Datenmodell mit Beziehungen bauen Sie danach von Hand weiter aus. Und schließlich erzeugt das Tool nur SQL-Text, es führt nichts aus und verbindet sich mit keiner Datenbank. Den Import übernehmen Sie selbst, etwa in MySQL oder einem anderen System.

Wenn Sie unsicher sind, gilt eine einfache Faustregel: Im Zweifel ist TEXT die sichere Wahl. Lieber eine Spalte als Text speichern und später bewusst konvertieren, als beim Import an einer falsch erkannten Zahl scheitern oder stillschweigend eine führende Null verlieren.

Häufige Fragen

Wie generiere ich ein CREATE TABLE aus einer CSV-Datei?

Sie fügen die CSV ein oder wählen die Datei, das Tool liest die erste Zeile als Spaltennamen und prüft die Werte jeder Spalte auf einen passenden Datentyp. Daraus entsteht ein CREATE-TABLE-Statement mit Spaltennamen, Typen und NULL- oder NOT-NULL-Angabe. Das läuft komplett lokal im Browser, ohne Upload.

Wie erkennt das Tool die Datentypen der Spalten?

Das Tool prüft alle nicht leeren Werte einer Spalte und wählt den engsten passenden Typ: BOOLEAN, dann INTEGER, dann eine Dezimalzahl, dann DATE bei eindeutigem ISO-Datum, sonst TEXT beziehungsweise VARCHAR. Ein einziger Wert, der nicht passt, kippt die Spalte auf den allgemeineren Typ.

Warum wird meine Postleitzahl als Zahl statt als Text erkannt?

Postleitzahlen bestehen nur aus Ziffern, deshalb wertet die Heuristik sie als INTEGER. Dabei geht eine führende Null verloren, aus 01067 wird 1067. Setzen Sie solche Spalten bewusst auf TEXT beziehungsweise VARCHAR, dann bleiben führende Nullen erhalten.

Erzeugt das Tool auch INSERT-Statements?

Ja. Neben dem CREATE TABLE erzeugt das Tool auf Wunsch die passenden INSERT-Statements für die Datenzeilen, wahlweise als einzelne Anweisungen oder als Batch-Insert mit mehreren Zeilen pro INSERT.

Werden meine Daten beim Generieren hochgeladen?

Nein. Das Parsen der CSV und das Erzeugen des CREATE-TABLE-Statements laufen zu 100 Prozent im Browser. Es gibt keinen Upload, keinen Server, kein Konto und keine Speicherung. Ihre Datei verlässt das Gerät nicht.

Weiterführende Artikel

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige