---
title: "Migrare MariaDB a SQLite nel browser"
description: "Migra un database MariaDB a SQLite: converti il suo dump in uno script con le stesse tabelle, chiavi, sequenze e dati, e un report di ogni modifica."
canonical: https://intosql.com/it/mariadb-in-sqlite
last_updated: 2026-10-15
---

# Migrare MariaDB a SQLite nel browser

Trascina un dump di mariadb-dump, mysqldump, phpMyAdmin o Adminer, in .sql o .sql.gz, e scarica uno script SQLite con le stesse tabelle, chiavi, indici e dati. Ogni valore che SQLite non può contenere così com'è, e ogni oggetto che non supporta, è elencato nel report.

[Guida alla migrazione da MariaDB a SQLite](https://intosql.com/docs/migrations/mariadb-to-sqlite)

[Tipi di dati da MariaDB a SQLite](https://intosql.com/docs/types/mariadb-to-sqlite)

## Cosa cambia da MariaDB a SQLite

Ogni riga è una regola che il convertitore applica, con la riga del report che scrive quando la regola cambia qualcosa nei tuoi dati.

| In MariaDB | In SQLite | Riga del report |
| --- | --- | --- |
| TINYINT(1), BOOL | INTEGER con i valori così come sono |  |
| UNSIGNED integers | INTEGER con un CHECK che non sia negativo; BIGINT UNSIGNED con valori oltre 2^63-1 è TEXT | `unsigned_widened` |
| ZEROFILL and display widths | rimosso | `zerofill_dropped` |
| FLOAT(M,D) | REAL, senza la scala | `float_scale_dropped` |
| DECIMAL(p,s) | DECIMAL(p,s) fino a 15 cifre; TEXT oltre | `decimal_as_text` |
| BIT(1), BIT(n) | INTEGER con il valore dei bit; BIT(64) come cifre TEXT |  |
| zero, partial or impossible dates (0000-00-00, 2024-02-30) | NULL | `invalid_date_null` |
| NOT NULL columns with values that become NULL | NOT NULL rimosso | `not_null_relaxed` |
| DEFAULT '0000-00-00' | nessun valore predefinito | `zero_date_default` |
| TIME | testo TIME come lo scrive MySQL, durate incluse |  |
| YEAR | INTEGER con un CHECK del suo intervallo |  |
| CHAR(n), VARCHAR(n) | VARCHAR(n), non applicato |  |
| DATETIME | DATETIME come testo ISO 8601 |  |
| TIMESTAMP | TIMESTAMP come testo ISO 8601 in UTC; il fuso indicato dal dump, UTC se non ne indica uno | `timestamp_zone_assumed` |
| ENUM | TEXT con un CHECK dei suoi valori |  |
| ENUM holding '' (MySQL's error value) | il valore vuoto ammesso dal vincolo CHECK | `enum_invalid_value` |
| ENUM holding values outside its list | nessun CHECK | `enum_check_skipped` |
| SET | TEXT come lo scrive MySQL ('a,b') |  |
| JSON | TEXT |  |
| NUL bytes in text | mantenuto |  |
| text that isn't valid in its character set | i byte errati come carattere di sostituzione | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | copiato così com'è | `mojibake_suspected` |
| AUTO_INCREMENT | INTEGER PRIMARY KEY AUTOINCREMENT, con il contatore impostato oltre gli id copiati |  |
| AUTO_INCREMENT on part of a key or outside one | INTEGER senza contatore | `identity_without_counter` |
| ON UPDATE CURRENT_TIMESTAMP | un trigger AFTER UPDATE | `on_update_trigger` |
| generated columns | GENERATED ALWAYS AS, VIRTUAL o STORED come nella sorgente |  |
| generated columns with functions SQLite lacks | una colonna semplice | `generated_not_translated` |
| INVISIBLE columns | colonne normali | `invisible_column` |
| CHECK constraints | tradotti, dentro CREATE TABLE |  |
| CHECK constraints with functions SQLite lacks | non creato | `check_skipped` |
| CHECK ... NOT ENFORCED | non creati | `check_not_enforced` |
| defaults with functions SQLite lacks | nessun valore predefinito | `default_not_translated` |
| keys and indexes on a prefix, c(20) | un indice su substr(c, 1, 20) | `prefix_unique` |
| FULLTEXT indexes | non creato | `fulltext_not_created` |
| SPATIAL indexes | non creato | `spatial_index_not_created` |
| functional indexes SQLite can't write | non creato | `index_skipped` |
| foreign keys | in CREATE TABLE, caricate senza controllo, poi elencate da PRAGMA foreign_key_check |  |
| foreign keys to columns without a unique key | non creata | `foreign_key_skipped` |
| table, index and column names | come scritti; rinominati quando differiscono solo per maiuscole o un nome di indice si ripete | `identifier_renamed` |
| GEOMETRY, POINT, POLYGON... | WKB in un BLOB | `geometry_as_blob` |
| INET4, INET6, UUID (MariaDB) | TEXT |  |
| BINARY, VARBINARY, BLOB | BLOB |  |
| PARTITION BY | una sola tabella | `partitions_dropped` |
| WITH SYSTEM VERSIONING (MariaDB) | una tabella con le righe attuali | `system_versioning_dropped` |
| MyISAM, MEMORY and other engines | una tabella normale | `engine_dropped` |
| dumps of several databases | un unico file, ogni tabella con il nome del suo database davanti | `databases_merged` |
| views, triggers, procedures, functions and events | elencati nel report | `not_converted_objects` |
| dumps without CREATE TABLE | tipi ricavati dai valori | `no_schema` |
| geometries in a dump without CREATE TABLE | WKB in un BLOB | `geometry_as_blob` |
| _ci collations | confronto esatto | `case_insensitive_collation` |
| SET NAMES utf8 from utf8mb4 tables | convertito, con un avviso | `dump_lost_four_byte_chars` |
| dumps without SET NAMES whose text isn't UTF-8 | letto come Latin-1 (Windows-1252) | `charset_guessed` |
| sjis, cp932, gbk, big5 dumps | letto come UTF-8, con un avviso | `unsupported_charset` |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | valutate |  |
| other expressions in rows | NULL | `expression_value` |
| DEFAULT in VALUES | il valore predefinito della colonna | `default_keyword_filled` |
| DEFAULT in VALUES without a literal default | NULL | `default_keyword_null` |
| REPLACE and INSERT IGNORE | righe semplici | `replace_as_insert` |
| types IntoSQL doesn't know | TEXT | `unknown_type` |
| values that don't fit their column | NULL | `invalid_value_null` |
| unreadable geometries | NULL | `bad_geometry` |
| CREATE SEQUENCE (MariaDB) | non creato | `sequence_not_converted` |
| VECTOR(n) (MariaDB 11.7+) | TEXT con i float come array JSON | `type_replaced` |

## Carica lo script in SQLite

Lo script crea le tabelle, copia le righe, poi aggiunge chiavi, indici e chiavi esterne, così si carica in fretta e si ferma al primo errore.

```shell
sqlite3 -bail mydb.sqlite < mariadb.sqlite.sql
```

Le chiavi esterne sono dichiarate in ogni tabella e le righe si caricano con i controlli delle chiavi esterne disattivati. Lo script poi elenca ogni riga che punta a una riga che non esiste, invece di fallire a metà.

Per un dump grande, carica in un file nuovo su un disco locale. Lo script carica tutto in un'unica transazione con la sincronizzazione disattivata, così va alla velocità del disco, e un caricamento che si ferma a metà non lascia tabelle parziali.

La riga di comando carica il file direttamente in un database SQLite, senza scrivere uno script. È gratis.

## Fai il dump di MariaDB per il miglior risultato

Il convertitore legge ciò che il dump contiene. Con queste opzioni il dump conserva più dei tuoi dati:

- --default-character-set=utf8mb4 conserva emoji e altri caratteri a 4 byte, che un dump utf8mb3 perde prima che il convertitore lo veda.
- --hex-blob scrive le colonne binarie e i valori VECTOR in esadecimale, che resiste alla copia tra sistemi diversi.
- --routines --triggers --events aggiungono quegli oggetti al dump, così il report può elencarli.

## Cosa non viene convertito

Viste, trigger, stored procedure, funzioni ed eventi sono scritti nel linguaggio proprio di MariaDB. Sono elencati per nome nel report, mai rimossi in silenzio, così puoi riscriverli per SQLite.

## Domande sulla conversione da MariaDB a SQLite

### Il mio dump viene caricato?

No. Il convertitore funziona nel tuo browser e legge il dump dal tuo disco a pezzi, quindi non lascia mai il tuo computer. Anche l'app desktop e la riga di comando convertono sul tuo computer.

### Quanto può essere grande il dump?

Il convertitore non tiene mai l'intero dump in memoria: legge il file due volte, per intervalli, e scrive lo script man mano. I dump di più gigabyte si convertono nel browser, nell'app desktop e con la riga di comando.

### Da quali versioni di MariaDB può provenire il dump?

Dump di mariadb-dump e mysqldump su MariaDB dalla 10.3 alla 12, con un INSERT per tabella o uno per riga. Ogni dump di test viene da MariaDB 10.11, 11.4 e 11.8 ed è confrontato con la sorgente cella per cella.

### Le colonne UUID, INET6, JSON e VECTOR vengono mantenute?

Le colonne UUID e INET diventano text, JSON text e VECTOR un array JSON dei suoi float. Le date zero diventano NULL e il report le conta.

### I valori AUTO_INCREMENT e le sequenze vengono mantenuti?

Una colonna AUTO_INCREMENT che è l'intera chiave primaria della tabella diventa INTEGER PRIMARY KEY AUTOINCREMENT e riparte dopo l'id più alto. SQLite non ha sequenze, quindi il report le segnala.

### E le stored procedure e i trigger?

Sono elencati per nome nel report e non vengono convertiti, perché ogni database li scrive nel proprio linguaggio.

### Su quali versioni di SQLite si carica lo script?

SQLite 3.31 e successive. Ogni dump di test si carica su 3.31 e 3.54, fermandosi al primo errore se qualcosa va storto.

## Da MariaDB

- [Da MariaDB a PostgreSQL](https://intosql.com/it/mariadb-in-postgresql)
- [Da MariaDB a MySQL](https://intosql.com/it/mariadb-in-mysql)
- [Da MariaDB a MariaDB](https://intosql.com/it/mariadb-in-mariadb)
- [Da MariaDB a SQL Server](https://intosql.com/it/mariadb-in-sql-server)
- [Da MariaDB a Oracle](https://intosql.com/it/mariadb-in-oracle)

## Verso SQLite

- [Da MySQL a SQLite](https://intosql.com/it/mysql-in-sqlite)
- [Da PostgreSQL a SQLite](https://intosql.com/it/postgresql-in-sqlite)
- [Da SQL Server a SQLite](https://intosql.com/it/sql-server-in-sqlite)
- [Da SQLite a SQLite](https://intosql.com/it/sqlite-in-sqlite)
- [Da Oracle a SQLite](https://intosql.com/it/oracle-in-sqlite)

## Guida e tutte le coppie

- [Da SQLite a MariaDB](https://intosql.com/it/sqlite-in-mariadb)
- [Guida alla migrazione da MariaDB a SQLite](https://intosql.com/docs/migrations/mariadb-to-sqlite)
- [Tipi di dati da MariaDB a SQLite](https://intosql.com/docs/types/mariadb-to-sqlite)
- [Tutte le coppie di database](https://intosql.com/it/migrazione-database)
