100 % locale — i tuoi dati non lasciano mai il tuo browser

JSON in MySQL — un CREATE TABLE da eseguire

Trasforma un campione JSON in un CREATE TABLE MySQL. I tipi vengono dai valori, e una stringa troppo lunga per VARCHAR(255) riceve TEXT al suo posto.

Istantaneo Privato Zero cookie

Input JSON

Output MySQL

Che cosa fa questo strumento

Un campione JSON diventa un 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
);

I nomi delle colonne sono in snake_case tra backtick, quindi una parola riservata o un trattino in una chiave non è un problema. Due chiavi che danno lo stesso nome prendono un suffisso invece di fondersi.

Una colonna su misura del valore

Le stringhe diventano VARCHAR(255) — salvo quando il campione mostra che non ci stanno:

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

MySQL in modo stretto — predefinito dalla 5.7 — rifiuta un valore più lungo della colonna con l’errore 1406. Un VARCHAR(255) qui ti avrebbe dato una tabella incapace di contenere il documento che l’ha generata. Era un difetto vero, trovato scrivendo questa pagina e corretto.

Il limite viene dal valore più lungo del campione: è un pavimento, non una promessa. Se le tue stringhe di produzione sono più lunghe di ciò che hai incollato, allarga la colonna.

Tutte le righe, non solo la prima

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

La tabella nasceva dal solo primo oggetto: la seconda riga del tuo stesso campione falliva l’inserimento — Unknown column 'b'. Ora le colonne sono l’unione di tutti gli oggetti, e una chiave che manca in alcuni è nullable, perché lo è.

Il tipo segue la stessa regola. Una chiave che vale 1 su una riga e "x" su quella dopo prendeva il tipo della prima incontrata, e l’altro valore restava senza colonna in cui entrare; ora riceve una colonna JSON, che tiene entrambi. Un valore di 300 caratteri che compare solo alla decima riga allarga la colonna a TEXT come se fosse stato il primo.

Ciò che non viene inventato

  • Né chiave primaria, né indice, né clausola di motore o set di caratteri. Sono decisioni sui tuoi dati e sul tuo server; un documento non ne dice nulla.
  • NOT NULL dove c’era un valore, NULL per un null e per una chiave assente in alcune righe.
  • Oggetti e array diventano colonne JSON. Nessuna tabella collegata, nessuna chiave esterna: un campione non può mostrare una relazione, e inventarne una impilerebbe tre supposizioni.

Privato per progettazione

Tutto viene eseguito localmente nel browser con JavaScript. I tuoi dati non vengono mai caricati, quindi lo strumento è sicuro per contenuti sensibili e funziona anche offline.

Domande frequenti

Perché una colonna è TEXT e le altre VARCHAR(255)?
Perché quel valore non ci stava. `VARCHAR(255)` è il predefinito qui, e MySQL in modo stretto rifiuta un valore più lungo con l’errore 1406: la tabella non conterrebbe il campione da cui viene. Oltre i 255 caratteri la colonna diventa `TEXT`. Se i tuoi dati veri sono più lunghi del campione, allargala tu.
Dov’è la chiave primaria?
Da nessuna parte: un campione non dice quale colonna identifica una riga. Un `id` che sembra unico in un documento può ripetersi nel successivo. Aggiungere `PRIMARY KEY (id)` — o un surrogato `AUTO_INCREMENT` — è una riga, ed è una decisione sui tuoi dati, non una loro lettura.
Perché il mio oggetto annidato è una colonna JSON?
Perché SQL non ha tipi annidati e un campione non mostra relazioni. `{"address": {"city": "Paris"}}` può essere una tabella collegata o un blocco che appartiene alla riga; inventare tabella, chiave esterna e verso sarebbero tre supposizioni. MySQL 5.7 e successivi lo salvano come `JSON`, che resta interrogabile.

Convertitori correlati