---
title: "Migrer une base SQLite vers MySQL"
description: "Migrez une base SQLite vers MySQL : convertissez le fichier .db ou son dump en script avec les mêmes tables, clés et données, et un rapport des changements."
canonical: https://intosql.com/fr/sqlite-en-mysql
last_updated: 2026-10-15
---

# Migrer une base SQLite vers MySQL

Déposez un fichier de base de données SQLite (.db, .sqlite, .sqlite3) ou le SQL qu'écrit le .dump de sqlite3, et téléchargez un script MySQL avec les mêmes tables, clés, index et données. Chaque colonne reçoit le type auquel ses valeurs correspondent, et chaque valeur que MySQL ne peut pas contenir telle quelle est listée dans le rapport.

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

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

## Ce qui change de SQLite à MySQL

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 SQLite | Dans MySQL | Ligne du rapport |
| --- | --- | --- |
| declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none) | le type auquel chaque valeur de la colonne correspond |  |
| BOOLEAN, BOOL | tinyint(1) |  |
| TEXT, VARCHAR(n), CHAR(n), CLOB | varchar(n) jusqu'à 1024 caractères, types text au-delà |  |
| DECIMAL(p,s), NUMERIC | le type exact si chaque valeur y tient, sinon un double |  |
| BLOB, and columns holding bytes | types blob |  |
| DATE, DATETIME, TIMESTAMP holding ISO 8601 text | date, datetime(p) |  |
| JSON holding JSON text | json |  |
| Infinity in REAL columns | NULL | `invalid_value_null` |
| INTEGER PRIMARY KEY, AUTOINCREMENT | AUTO_INCREMENT, qui reprend après l'identifiant le plus élevé ou celui de sqlite_sequence |  |
| COLLATE NOCASE | comparaison exacte (utf8mb4_bin) | `case_insensitive_collation` |
| generated columns | colonnes générées, STORED ou VIRTUAL comme dans la source |  |
| generated columns with functions IntoSQL doesn't write, and the || operator | une colonne simple | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (strftime, randomblob) | aucune valeur par défaut | `default_not_translated` |
| CHECK constraints | traduites |  |
| CHECK constraints with functions IntoSQL doesn't write | non créée | `check_skipped` |
| partial and expression indexes | non créée | `index_skipped` |
| foreign keys (unenforced unless PRAGMA foreign_keys=ON) | clés étrangères, chargées avec FOREIGN_KEY_CHECKS=0 |  |
| foreign keys to tables the dump doesn't create | non créée | `foreign_key_skipped` |
| primary keys holding NULL, and NOT NULL columns with values that become NULL | NOT NULL retiré | `not_null_relaxed` |
| views, triggers and virtual tables (FTS, R*Tree) | listés dans le rapport | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | types déduits des valeurs | `no_schema` |
| expressions in INSERT values other than the text functions dumps write | NULL | `expression_value` |
| NUL characters in text | conservé |  |
| text that isn't valid UTF-8 | les octets invalides deviennent le caractère de remplacement | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | copié tel quel | `mojibake_suspected` |

## Charger le script dans MySQL

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
mysql --default-character-set=utf8mb4 mydb < sqlite.mysql.sql
```

Les clés étrangères sont créées comme le dump les déclare, avec FOREIGN_KEY_CHECKS=0 pendant le chargement des lignes ; une ligne qui pointe vers une ligne absente n'arrête donc pas le chargement.

Pour un gros dump, exécutez le client sur la machine du serveur, et augmentez max_allowed_packet si une seule ligne est très grande.

IntoSQL Pro charge le fichier directement dans MySQL depuis l'application de bureau ou la ligne de commande, sans écrire de script.

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

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

- Le fichier de base de données lui-même se convertit tel quel, lu page par page dans votre navigateur. Fermez d'abord l'application qui y écrit, pour qu'aucun changement ne reste dans son fichier -wal.
- sqlite3 app.db .dump > app.sql écrit la même base de données en SQL, qui se convertit aussi, en .sql ou .sql.gz.
- DB Browser for SQLite écrit ce SQL avec File, Export, Database to SQL file, tout comme iterdump() de Python.

## Ce qui n'est pas converti

Les vues et les déclencheurs sont écrits dans le langage propre à SQLite. Ils sont listés par nom dans le rapport, jamais supprimés en silence, pour que vous puissiez les réécrire pour MySQL. Les tables virtuelles, comme FTS5 et R*Tree, sont listées aussi, et leurs tables internes sont omises.

## Questions sur SQLite vers MySQL

### 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.

### Puis-je convertir le fichier .db lui-même ?

Oui. Déposez le fichier .db, .sqlite ou .sqlite3 : il est lu dans votre navigateur et jamais envoyé. Le texte avec des caractères NUL et chaque chiffre d'un double arrivent tels qu'ils sont stockés, ce qu'un .dump peut tronquer.

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

Les fichiers de base de données de SQLite 3.0 et après, en UTF-8 ou UTF-16, et les dumps du .dump du shell sqlite3 ou de iterdump() de Python. Chaque fichier et dump de test vient de sqlite3 3.31 à 3.54, tables STRICT et WITHOUT ROWID comprises, et est comparé à sa source cellule par cellule.

### Comment les types de colonnes sont-ils décidés quand SQLite ne les impose pas ?

Le type déclaré est une indication et les valeurs décident : une colonne devient un type integer, decimal, double, date, datetime, tinyint(1), blob ou text quand chaque valeur y correspond. Le texte dans une clé ou avec une valeur par défaut est varchar(768), pour que MySQL 5.7 puisse l'indexer.

### INTEGER PRIMARY KEY et AUTOINCREMENT sont-ils conservés ?

Oui. Un INTEGER PRIMARY KEY devient AUTO_INCREMENT, chaque ligne garde son identifiant, et le prochain identifiant reprend après le plus élevé, ou après la valeur de sqlite_sequence avec AUTOINCREMENT.

### Et les vues 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 MySQL le script se charge-t-il ?

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

## Depuis SQLite

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

## Vers MySQL

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

## Guide et toutes les paires

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