---
title: "MySQL naar SQLite migreren in je browser"
description: "Migreer een MySQL- of MariaDB-database naar SQLite: zet de dump om naar een script met dezelfde tabellen, sleutels en data, en een rapport van elke wijziging."
canonical: https://intosql.com/nl/mysql-naar-sqlite
last_updated: 2026-10-15
---

# MySQL naar SQLite migreren in je browser

Zet een dump van mysqldump, mariadb-dump, mysqlpump, phpMyAdmin of Adminer neer, als .sql of .sql.gz, en download een SQLite-script met dezelfde tabellen, sleutels, indexen en data. Elke waarde die SQLite niet ongewijzigd kan bevatten, en elk object dat het niet overneemt, staat in het rapport.

[Migratiehandleiding MySQL naar SQLite](https://intosql.com/docs/migrations/mysql-to-sqlite)

[Datatypen van MySQL naar SQLite](https://intosql.com/docs/types/mysql-to-sqlite)

## Wat er verandert van MySQL naar SQLite

Elke rij is een regel die de converter toepast, met de rapportregel die hij schrijft als de regel iets in je data verandert.

| In MySQL | In SQLite | Rapportregel |
| --- | --- | --- |
| TINYINT(1), BOOL | INTEGER met de waarden ongewijzigd |  |
| UNSIGNED integers | INTEGER met een CHECK dat het niet negatief is; BIGINT UNSIGNED met waarden boven 2^63-1 wordt TEXT | `unsigned_widened` |
| ZEROFILL and display widths | weggelaten | `zerofill_dropped` |
| FLOAT(M,D) | REAL, zonder de schaal | `float_scale_dropped` |
| DECIMAL(p,s) | DECIMAL(p,s) tot 15 cijfers; daarboven TEXT | `decimal_as_text` |
| BIT(1), BIT(n) | INTEGER met de waarde van de bits; BIT(64) als TEXT-cijfers |  |
| 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 weggelaten | `not_null_relaxed` |
| DEFAULT '0000-00-00' | geen standaardwaarde | `zero_date_default` |
| TIME | TIME-tekst zoals MySQL hem schrijft, inclusief duren |  |
| YEAR | INTEGER met een CHECK op het bereik |  |
| CHAR(n), VARCHAR(n) | VARCHAR(n), niet afgedwongen |  |
| DATETIME | DATETIME als ISO 8601-tekst |  |
| TIMESTAMP | TIMESTAMP als ISO 8601-tekst in UTC; de zone die de dump vermeldt, UTC als die er geen vermeldt | `timestamp_zone_assumed` |
| ENUM | TEXT met een CHECK op de waarden |  |
| ENUM holding '' (MySQL's error value) | de lege waarde, toegestaan door de check | `enum_invalid_value` |
| ENUM holding values outside its list | geen CHECK | `enum_check_skipped` |
| SET | TEXT zoals MySQL het schrijft ('a,b') |  |
| JSON | TEXT |  |
| NUL bytes in text | behouden |  |
| text that isn't valid in its character set | de foute bytes als het vervangingsteken | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | ongewijzigd gekopieerd | `mojibake_suspected` |
| AUTO_INCREMENT | INTEGER PRIMARY KEY AUTOINCREMENT, met de teller voorbij de gekopieerde id's |  |
| AUTO_INCREMENT on part of a key or outside one | INTEGER zonder teller | `identity_without_counter` |
| ON UPDATE CURRENT_TIMESTAMP | een AFTER UPDATE-trigger | `on_update_trigger` |
| generated columns | GENERATED ALWAYS AS, VIRTUAL of STORED zoals in de bron |  |
| generated columns with functions SQLite lacks | een gewone kolom | `generated_not_translated` |
| INVISIBLE columns | gewone kolommen | `invisible_column` |
| CHECK constraints | vertaald, inline in CREATE TABLE |  |
| CHECK constraints with functions SQLite lacks | niet aangemaakt | `check_skipped` |
| CHECK ... NOT ENFORCED | niet aangemaakt | `check_not_enforced` |
| defaults with functions SQLite lacks | geen standaardwaarde | `default_not_translated` |
| keys and indexes on a prefix, c(20) | een index op substr(c, 1, 20) | `prefix_unique` |
| FULLTEXT indexes | niet aangemaakt | `fulltext_not_created` |
| SPATIAL indexes | niet aangemaakt | `spatial_index_not_created` |
| functional indexes SQLite can't write | niet aangemaakt | `index_skipped` |
| foreign keys | in CREATE TABLE, ongecontroleerd geladen, daarna opgesomd door PRAGMA foreign_key_check |  |
| foreign keys to columns without a unique key | niet aangemaakt | `foreign_key_skipped` |
| table, index and column names | zoals geschreven; hernoemd als ze alleen in hoofdletters verschillen of een indexnaam herhaald wordt | `identifier_renamed` |
| GEOMETRY, POINT, POLYGON... | WKB in een BLOB | `geometry_as_blob` |
| INET4, INET6, UUID (MariaDB) | TEXT |  |
| BINARY, VARBINARY, BLOB | BLOB |  |
| PARTITION BY | één tabel | `partitions_dropped` |
| WITH SYSTEM VERSIONING (MariaDB) | een tabel met de huidige rijen | `system_versioning_dropped` |
| MyISAM, MEMORY and other engines | een gewone tabel | `engine_dropped` |
| dumps of several databases | één bestand, elke tabel met de naam van zijn database ervoor | `databases_merged` |
| views, triggers, procedures, functions and events | vermeld in het rapport | `not_converted_objects` |
| dumps without CREATE TABLE | typen afgeleid uit de waarden | `no_schema` |
| geometries in a dump without CREATE TABLE | WKB in een BLOB | `geometry_as_blob` |
| _ci collations | exacte vergelijking | `case_insensitive_collation` |
| SET NAMES utf8 from utf8mb4 tables | geconverteerd, met een waarschuwing | `dump_lost_four_byte_chars` |
| dumps without SET NAMES whose text isn't UTF-8 | gelezen als Latin-1 (Windows-1252) | `charset_guessed` |
| sjis, cp932, gbk, big5 dumps | gelezen als UTF-8, met een waarschuwing | `unsupported_charset` |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | geëvalueerd |  |
| other expressions in rows | NULL | `expression_value` |
| DEFAULT in VALUES | de standaardwaarde van de kolom | `default_keyword_filled` |
| DEFAULT in VALUES without a literal default | NULL | `default_keyword_null` |
| REPLACE and INSERT IGNORE | gewone rijen | `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) | niet aangemaakt | `sequence_not_converted` |
| VECTOR(n) (MariaDB 11.7+) | TEXT met de floats als JSON-array | `type_replaced` |

## Het script in SQLite laden

Het script maakt de tabellen aan, kopieert de rijen en voegt daarna sleutels, indexen en refererende sleutels toe, zodat het snel laadt en bij de eerste fout stopt.

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

Refererende sleutels worden in elke tabel gedeclareerd en de rijen laden met de controle op refererende sleutels uit. Daarna somt het script elke rij op die naar een niet-bestaande rij verwijst, in plaats van halverwege te mislukken.

Laad een grote dump in een nieuw bestand op een lokale schijf. Het script laadt alles in één transactie met synchronisatie uit, dus het draait op schijfsnelheid, en een laadactie die halverwege stopt, laat geen halve tabellen achter.

De opdrachtregel laadt het bestand rechtstreeks in een SQLite-database, zonder een script te schrijven. Dat is gratis.

## Een dump van MySQL maken voor het beste resultaat

De converter leest wat de dump bevat. Met deze opties blijft er meer van je data in staan:

- --default-character-set=utf8mb4 behoudt emoji en andere 4-bytestekens, die een utf8-dump kwijtraakt voordat de converter hem ziet.
- --hex-blob schrijft binaire kolommen als hexadecimaal, wat kopiëren tussen systemen overleeft.
- --routines --triggers --events voegen die objecten aan de dump toe, zodat het rapport ze kan vermelden.

## Wat niet wordt geconverteerd

Weergaven, triggers, opgeslagen procedures, functies en gebeurtenissen worden geschreven in de eigen taal van elke database. Ze staan op naam in het rapport en worden nooit stilletjes weggelaten, zodat je ze kunt herschrijven voor SQLite.

## Vragen over MySQL naar SQLite

### Wordt mijn dump geüpload?

Nee. De converter draait in je browser en leest de dump in delen van je schijf, dus hij verlaat je computer nooit. De desktopapp en de opdrachtregel converteren ook op je computer.

### Hoe groot mag de dump zijn?

De converter houdt nooit de hele dump in het geheugen: hij leest het bestand twee keer, in bereiken, en schrijft het script gaandeweg. Dumps van meerdere gigabytes worden geconverteerd in de browser, in de desktopapp en met de opdrachtregel.

### Leest het MariaDB-dumps?

Ja. Dumps van mariadb-dump en van MariaDB 10.3 tot en met 12 worden op dezelfde manier geconverteerd, inclusief de INET6-, INET4- en UUID-kolommen van MariaDB.

### Wat gebeurt er met datums als 0000-00-00?

Ze worden NULL: SQLite zou de tekst opslaan, maar niets leest 0000-00-00 als datum. Het rapport vermeldt hoeveel er in elke kolom waren.

### Blijven AUTO_INCREMENT-waarden behouden?

Ja. Een AUTO_INCREMENT-kolom die de hele primaire sleutel van de tabel is, wordt INTEGER PRIMARY KEY AUTOINCREMENT, elke rij behoudt zijn id, en het volgende id gaat verder na het hoogste. Elke andere AUTO_INCREMENT-kolom behoudt zijn waarden zonder teller, en het rapport meldt dat.

### Wordt TINYINT(1) boolean?

Nee. SQLite heeft geen boolean-type, dus TINYINT(1) wordt INTEGER en elke waarde blijft ongewijzigd.

### En opgeslagen procedures en triggers?

Ze staan op naam in het rapport en worden niet geconverteerd, omdat elke database ze in een eigen taal schrijft. ON UPDATE CURRENT_TIMESTAMP is de uitzondering: dat wordt een SQLite-trigger.

### Op welke SQLite-versies laadt het script?

SQLite 3.31 en later. Elke testdump laadt op 3.31 en 3.54 en stopt bij de eerste fout als er iets misgaat.

## Vanuit MySQL

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

## Naar SQLite

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

## Handleiding en elke combinatie

- [SQLite naar MySQL](https://intosql.com/nl/sqlite-naar-mysql)
- [Migratiehandleiding MySQL naar SQLite](https://intosql.com/docs/migrations/mysql-to-sqlite)
- [Datatypen van MySQL naar SQLite](https://intosql.com/docs/types/mysql-to-sqlite)
- [Elke databasecombinatie](https://intosql.com/nl/databasemigratie)
