---
title: "Migrer une base MariaDB vers SQLite"
description: "Migrez une base MariaDB vers SQLite : convertissez son dump en script avec les mêmes tables, clés, séquences et données, et un rapport de chaque changement."
canonical: https://intosql.com/fr/mariadb-en-sqlite
last_updated: 2026-10-15
---

# Migrer une base MariaDB vers SQLite

Déposez un dump de mariadb-dump, mysqldump, phpMyAdmin ou Adminer, en .sql ou .sql.gz, et téléchargez un script SQLite avec les mêmes tables, clés, index et données. Chaque valeur que SQLite ne peut pas contenir telle quelle, et chaque objet qu'il ne reprend pas, est listé dans le rapport.

[Guide de migration de MariaDB vers SQLite](https://intosql.com/docs/migrations/mariadb-to-sqlite)

[Types de données de MariaDB vers SQLite](https://intosql.com/docs/types/mariadb-to-sqlite)

## Ce qui change de MariaDB à SQLite

Chaque ligne est une règle appliquée par le convertisseur, avec la ligne de rapport qu'il écrit quand la règle change quelque chose dans vos données.

| Dans MariaDB | Dans SQLite | Ligne du rapport |
| --- | --- | --- |
| TINYINT(1), BOOL | INTEGER avec les valeurs telles quelles |  |
| UNSIGNED integers | INTEGER avec un CHECK qui interdit les négatifs ; BIGINT UNSIGNED avec des valeurs au-delà de 2^63-1 devient TEXT | `unsigned_widened` |
| ZEROFILL and display widths | supprimé | `zerofill_dropped` |
| FLOAT(M,D) | REAL, sans l'échelle | `float_scale_dropped` |
| DECIMAL(p,s) | DECIMAL(p,s) jusqu'à 15 chiffres ; TEXT au-delà | `decimal_as_text` |
| BIT(1), BIT(n) | INTEGER avec la valeur des bits ; BIT(64) en chiffres 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 retiré | `not_null_relaxed` |
| DEFAULT '0000-00-00' | aucune valeur par défaut | `zero_date_default` |
| TIME | texte TIME tel que MySQL l'écrit, durées comprises |  |
| YEAR | INTEGER avec un CHECK de sa plage |  |
| CHAR(n), VARCHAR(n) | VARCHAR(n), non appliqué |  |
| DATETIME | DATETIME en texte ISO 8601 |  |
| TIMESTAMP | TIMESTAMP en texte ISO 8601 en UTC ; le fuseau indiqué par le dump, UTC s'il n'en indique aucun | `timestamp_zone_assumed` |
| ENUM | TEXT avec un CHECK de ses valeurs |  |
| ENUM holding '' (MySQL's error value) | la valeur vide autorisée par le CHECK | `enum_invalid_value` |
| ENUM holding values outside its list | pas de CHECK | `enum_check_skipped` |
| SET | TEXT tel que MySQL l'écrit ('a,b') |  |
| JSON | TEXT |  |
| NUL bytes in text | conservé |  |
| text that isn't valid in its character set | les octets invalides deviennent le caractère de remplacement | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | copié tel quel | `mojibake_suspected` |
| AUTO_INCREMENT | INTEGER PRIMARY KEY AUTOINCREMENT, avec le compteur placé après les identifiants copiés |  |
| AUTO_INCREMENT on part of a key or outside one | INTEGER sans compteur | `identity_without_counter` |
| ON UPDATE CURRENT_TIMESTAMP | un déclencheur AFTER UPDATE | `on_update_trigger` |
| generated columns | GENERATED ALWAYS AS, VIRTUAL ou STORED comme dans la source |  |
| generated columns with functions SQLite lacks | une colonne simple | `generated_not_translated` |
| INVISIBLE columns | colonnes ordinaires | `invisible_column` |
| CHECK constraints | traduites, en ligne dans CREATE TABLE |  |
| CHECK constraints with functions SQLite lacks | non créée | `check_skipped` |
| CHECK ... NOT ENFORCED | non créée | `check_not_enforced` |
| defaults with functions SQLite lacks | aucune valeur par défaut | `default_not_translated` |
| keys and indexes on a prefix, c(20) | un index sur substr(c, 1, 20) | `prefix_unique` |
| FULLTEXT indexes | non créée | `fulltext_not_created` |
| SPATIAL indexes | non créée | `spatial_index_not_created` |
| functional indexes SQLite can't write | non créé | `index_skipped` |
| foreign keys | dans CREATE TABLE, chargées sans vérification, puis listées par PRAGMA foreign_key_check |  |
| foreign keys to columns without a unique key | non créée | `foreign_key_skipped` |
| table, index and column names | tels qu'écrits ; renommés s'ils ne diffèrent que par la casse ou si un nom d'index se répète | `identifier_renamed` |
| GEOMETRY, POINT, POLYGON... | WKB dans un BLOB | `geometry_as_blob` |
| INET4, INET6, UUID (MariaDB) | TEXT |  |
| BINARY, VARBINARY, BLOB | BLOB |  |
| PARTITION BY | une seule table | `partitions_dropped` |
| WITH SYSTEM VERSIONING (MariaDB) | une table avec les lignes actuelles | `system_versioning_dropped` |
| MyISAM, MEMORY and other engines | une table ordinaire | `engine_dropped` |
| dumps of several databases | un seul fichier, chaque table préfixée par le nom de sa base | `databases_merged` |
| views, triggers, procedures, functions and events | listés dans le rapport | `not_converted_objects` |
| dumps without CREATE TABLE | types déduits des valeurs | `no_schema` |
| geometries in a dump without CREATE TABLE | WKB dans un BLOB | `geometry_as_blob` |
| _ci collations | comparaison exacte | `case_insensitive_collation` |
| SET NAMES utf8 from utf8mb4 tables | converti, avec un avertissement | `dump_lost_four_byte_chars` |
| dumps without SET NAMES whose text isn't UTF-8 | lu comme Latin-1 (Windows-1252) | `charset_guessed` |
| sjis, cp932, gbk, big5 dumps | lu comme UTF-8, avec un avertissement | `unsupported_charset` |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | évaluées |  |
| other expressions in rows | NULL | `expression_value` |
| DEFAULT in VALUES | la valeur par défaut de la colonne | `default_keyword_filled` |
| DEFAULT in VALUES without a literal default | NULL | `default_keyword_null` |
| REPLACE and INSERT IGNORE | lignes simples | `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 créée | `sequence_not_converted` |
| VECTOR(n) (MariaDB 11.7+) | TEXT avec les flottants en tableau JSON | `type_replaced` |

## Charger le script dans SQLite

Le script crée les tables, copie les lignes, puis ajoute les clés, les index et les clés étrangères ; il se charge donc vite et s'arrête à la première erreur.

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

Les clés étrangères sont déclarées dans chaque table et les lignes se chargent sans vérification des clés étrangères. Le script liste ensuite toute ligne qui pointe vers une ligne qui n'existe pas, au lieu d'échouer à mi-chemin.

Pour un gros dump, chargez-le dans un nouveau fichier sur un disque local. Le script charge tout dans une seule transaction sans synchronisation, il va donc à la vitesse du disque, et un chargement interrompu ne laisse aucune table partielle.

La ligne de commande charge le fichier directement dans une base SQLite, sans écrire de script. C'est gratuit.

## Faire le dump MariaDB pour un meilleur résultat

Le convertisseur lit ce que contient le dump. Ces options y gardent davantage de vos données :

- --default-character-set=utf8mb4 garde les emoji et autres caractères sur 4 octets, qu'un dump utf8mb3 perd avant que le convertisseur ne le voie.
- --hex-blob écrit les colonnes binaires et les valeurs VECTOR en hexadécimal, ce qui résiste aux copies entre systèmes.
- --routines --triggers --events ajoutent ces objets au dump, pour que le rapport puisse les lister.

## Ce qui n'est pas converti

Les vues, déclencheurs, procédures stockées, fonctions et événements sont écrits dans le langage propre à MariaDB. Ils sont listés par nom dans le rapport, jamais supprimés en silence, pour que vous puissiez les réécrire pour SQLite.

## Questions sur MariaDB vers SQLite

### Mon dump est-il envoyé ?

Non. Le convertisseur s'exécute dans votre navigateur et lit le dump depuis votre disque par morceaux ; il ne quitte donc jamais votre ordinateur. L'application de bureau et la ligne de commande convertissent aussi sur votre ordinateur.

### Quelle taille peut avoir le dump ?

Le convertisseur ne garde jamais tout le dump en mémoire : il lit le fichier deux fois, par plages, et écrit le script au fur et à mesure. Les dumps de plusieurs gigaoctets se convertissent dans le navigateur, dans l'application de bureau et avec la ligne de commande.

### De quelles versions de MariaDB le dump peut-il venir ?

Les dumps de mariadb-dump et mysqldump sur MariaDB 10.3 à 12, avec un INSERT par table ou un par ligne. Chaque dump de test vient de MariaDB 10.11, 11.4 et 11.8 et est comparé à sa source cellule par cellule.

### Les colonnes UUID, INET6, JSON et VECTOR sont-elles conservées ?

Les colonnes UUID et INET deviennent text, JSON text, et VECTOR un tableau JSON de ses flottants. Les dates zéro deviennent NULL et le rapport les compte.

### Les valeurs AUTO_INCREMENT et les séquences sont-elles conservées ?

Une colonne AUTO_INCREMENT qui forme toute la clé primaire de la table devient INTEGER PRIMARY KEY AUTOINCREMENT et reprend après l'identifiant le plus élevé. SQLite n'a pas de séquences ; elles sont donc signalées dans le rapport.

### Et les procédures stockées et les déclencheurs ?

Ils sont listés par nom dans le rapport et ne sont pas convertis, car chaque base de données les écrit dans son propre langage.

### Sur quelles versions de SQLite le script se charge-t-il ?

SQLite 3.31 et versions ultérieures. Chaque dump de test se charge sur 3.31 et 3.54, et s'arrête à la première erreur en cas de problème.

## Depuis MariaDB

- [MariaDB vers PostgreSQL](https://intosql.com/fr/mariadb-en-postgresql)
- [MariaDB vers MySQL](https://intosql.com/fr/mariadb-en-mysql)
- [MariaDB vers MariaDB](https://intosql.com/fr/mariadb-en-mariadb)
- [MariaDB vers SQL Server](https://intosql.com/fr/mariadb-en-sql-server)
- [MariaDB vers Oracle](https://intosql.com/fr/mariadb-en-oracle)

## Vers SQLite

- [MySQL vers SQLite](https://intosql.com/fr/mysql-en-sqlite)
- [PostgreSQL vers SQLite](https://intosql.com/fr/postgresql-en-sqlite)
- [SQL Server vers SQLite](https://intosql.com/fr/sql-server-en-sqlite)
- [SQLite vers SQLite](https://intosql.com/fr/sqlite-en-sqlite)
- [Oracle vers SQLite](https://intosql.com/fr/oracle-en-sqlite)

## Guide et toutes les paires

- [SQLite vers MariaDB](https://intosql.com/fr/sqlite-en-mariadb)
- [Guide de migration de MariaDB vers SQLite](https://intosql.com/docs/migrations/mariadb-to-sqlite)
- [Types de données de MariaDB vers SQLite](https://intosql.com/docs/types/mariadb-to-sqlite)
- [Toutes les paires de bases de données](https://intosql.com/fr/migration-de-base-de-donnees)
