100 % lokal — Ihre Daten verlassen nie Ihren Browser

JSON in MySQL — ein CREATE TABLE zum Ausführen

Ein JSON-Beispiel in ein MySQL-CREATE-TABLE verwandeln. Die Spaltentypen kommen aus den Werten, zu lange Zeichenketten bekommen TEXT statt VARCHAR(255).

Sofort Privat Null Cookies

JSON-Eingabe

MySQL-Ausgabe

Was dieses Werkzeug tut

Aus einer JSON-Probe wird ein CREATE TABLE.

{ "id": 1, "firstName": "Ada", "score": 9.5, "address": { "city": "Paris" } }
CREATE TABLE `root` (
  `id` BIGINT NOT NULL,
  `first_name` VARCHAR(255) NOT NULL,
  `score` DOUBLE NOT NULL,
  `address` JSON NOT NULL
);

Spaltennamen stehen in snake_case und in Backticks, ein Schlüsselwort oder ein Bindestrich im Schlüssel ist also kein Problem. Zwei Schlüssel, die denselben Namen ergeben, bekommen ein Suffix statt verschmolzen zu werden.

Eine Spalte nach Maß des Werts

Zeichenketten werden VARCHAR(255) — außer die Probe zeigt, dass sie nicht hineinpassen:

{ "bio": "…301 Zeichen…" }
  `bio` TEXT NOT NULL

MySQL im strikten Modus — Vorgabe seit 5.7 — weist einen Wert, der länger als die Spalte ist, mit Fehler 1406 ab. Ein VARCHAR(255) hätte Ihnen hier eine Tabelle gegeben, die das erzeugende Dokument nicht fasst. Ein echter Fehler, beim Schreiben dieser Seite gefunden und behoben.

Die Grenze stammt vom längsten Wert der Probe: ein Boden, kein Versprechen. Sind Ihre Produktionswerte länger als das Eingefügte, verbreitern Sie die Spalte.

Alle Zeilen, nicht nur die erste

[{ "a": 1 }, { "a": 2, "b": "x" }]
CREATE TABLE `root_item` (
  `a` BIGINT NOT NULL,
  `b` VARCHAR(255) NULL
);

Die Tabelle entstand bisher allein aus dem ersten Objekt: die zweite Zeile Ihrer eigenen Probe scheiterte beim Einfügen — Unknown column 'b'. Die Spalten sind nun die Vereinigung aller Objekte, und ein Schlüssel, der in manchen fehlt, ist nullbar — er ist es ja.

Für den Typ gilt dasselbe. Ein Schlüssel, der in einer Zeile 1 und in der nächsten "x" ist, bekam den Typ des ersten Fundes, und der andere Wert hatte keine Spalte mehr; jetzt bekommt er eine JSON-Spalte, die beide fasst. Ein 300 Zeichen langer Wert, der erst in der zehnten Zeile auftaucht, macht die Spalte ebenso zu TEXT, als stünde er in der ersten.

Was nicht erfunden wird

  • Kein Primärschlüssel, kein Index, keine Engine- oder Zeichensatzklausel. Alles Entscheidungen über Ihre Daten und Ihren Server; ein Dokument sagt dazu nichts.
  • NOT NULL, wo ein Wert stand, NULL für ein null und für einen Schlüssel, der in manchen Zeilen fehlt.
  • Objekte und Arrays werden JSON-Spalten. Keine verbundene Tabelle, kein Fremdschlüssel: eine Probe kann keine Beziehung zeigen, und eine zu erfinden hieße drei Vermutungen zu stapeln.

Datenschutz ab Werk

Alles läuft lokal in deinem Browser mit JavaScript. Deine Daten werden nie hochgeladen, wodurch das Tool auch für sensible Inhalte sicher ist und offline funktioniert.

Häufige Fragen

Warum ist eine Spalte TEXT und sind die anderen VARCHAR(255)?
Weil dieser Wert nicht hineinpasste. `VARCHAR(255)` ist hier die Vorgabe, und MySQL im strikten Modus weist einen längeren Wert mit Fehler 1406 ab — die Tabelle fasste die Probe nicht, aus der sie stammt. Jenseits von 255 Zeichen wird die Spalte `TEXT`. Sind Ihre echten Daten länger als die Probe, verbreitern Sie sie selbst.
Wo ist der Primärschlüssel?
Nirgends: eine Probe sagt nicht, welche Spalte eine Zeile identifiziert. Eine `id`, die in einem Dokument eindeutig wirkt, kann sich im nächsten wiederholen. `PRIMARY KEY (id)` — oder ein `AUTO_INCREMENT`-Ersatz — ist eine Zeile, und eine Entscheidung über Ihre Daten, kein Lesen davon.
Warum ist mein verschachteltes Objekt eine JSON-Spalte?
Weil SQL keine verschachtelten Typen hat und eine Probe keine Beziehungen zeigt. `{"address": {"city": "Paris"}}` kann eine verbundene Tabelle sein oder ein Block, der in die Zeile gehört; Tabelle, Fremdschlüssel und Richtung zu erfinden wären drei Vermutungen. MySQL 5.7 und neuer legen es als `JSON` ab, das abfragbar bleibt.

Ähnliche Konverter