---
title: "MySQL naar Oracle migreren in je browser"
description: "Migreer een MySQL- of MariaDB-database naar Oracle: 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-oracle
last_updated: 2026-10-15
---

# MySQL naar Oracle migreren in je browser

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

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

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

## Wat er verandert van MySQL naar Oracle

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 Oracle | Rapportregel |
| --- | --- | --- |
| TINYINT(1), BOOL | NUMBER(1) met een CHECK op 0 en 1 als elke waarde 0 of 1 is, anders NUMBER(3) | `bool_kept_numeric` |
| UNSIGNED integers | NUMBER, breed genoeg voor het bereik, met een CHECK dat het niet negatief is |  |
| ZEROFILL and display widths | weggelaten | `zerofill_dropped` |
| FLOAT(M,D) | BINARY_FLOAT of BINARY_DOUBLE, zonder de schaal | `float_scale_dropped` |
| DECIMAL(p,s) | NUMBER(p,s) tot 38 cijfers; daarboven VARCHAR2 | `decimal_as_text` |
| BIT(1), BIT(n) | NUMBER(1), NUMBER(19) tot 63 bits, NUMBER(20) voor BIT(64) |  |
| 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` |
| empty strings and empty binary values | NULL | `empty_string_null` |
| DEFAULT '0000-00-00' | geen standaardwaarde | `zero_date_default` |
| TIME | INTERVAL DAY TO SECOND, dat duren bevat |  |
| YEAR | NUMBER(4) met een CHECK op het bereik |  |
| CHAR(n), VARCHAR(n) | VARCHAR2(n CHAR), in tekens geteld |  |
| VARCHAR(n) and TEXT longer than 4000 bytes | CLOB | `text_as_lob` |
| DATETIME | TIMESTAMP |  |
| TIMESTAMP | TIMESTAMP WITH TIME ZONE in de zone die de dump vermeldt, UTC als die er geen vermeldt | `timestamp_zone_assumed` |
| ENUM | VARCHAR2 met een CHECK op de waarden |  |
| ENUM holding '' (MySQL's error value) | NULL |  |
| ENUM holding values outside its list | geen CHECK | `enum_check_skipped` |
| SET | VARCHAR2 zoals MySQL het schrijft ('a,b') |  |
| JSON | CLOB |  |
| 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 | GENERATED BY DEFAULT ON NULL AS IDENTITY, herstart voorbij de gekopieerde id's |  |
| MyISAM AUTO_INCREMENT on the second column of a key | één teller voor de tabel | `myisam_group_autoincrement` |
| ON UPDATE CURRENT_TIMESTAMP | een BEFORE UPDATE-trigger | `on_update_trigger` |
| generated columns | virtuele kolommen | `stored_as_virtual` |
| generated columns with functions Oracle lacks | een gewone kolom | `generated_not_translated` |
| INVISIBLE columns | INVISIBLE-kolommen |  |
| CHECK constraints | vertaald, inline in CREATE TABLE |  |
| CHECK constraints with functions Oracle lacks | niet aangemaakt | `check_skipped` |
| CHECK ... NOT ENFORCED | niet aangemaakt | `check_not_enforced` |
| defaults with functions Oracle lacks | geen standaardwaarde | `default_not_translated` |
| keys and indexes on a prefix, c(20) | een index op SUBSTR van de kolom | `prefix_unique` |
| FULLTEXT indexes | niet aangemaakt | `fulltext_not_created` |
| SPATIAL indexes | niet aangemaakt | `spatial_index_not_created` |
| functional indexes, and indexes on whole CLOB or BLOB columns | niet aangemaakt | `index_skipped` |
| foreign keys | na de data, ENABLE NOVALIDATE, daarna gevalideerd met een waarschuwing bij wezen |  |
| ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT | weggelaten | `foreign_key_action_unsupported` |
| foreign keys to columns without a unique key | niet aangemaakt | `foreign_key_skipped` |
| table and column names | hoofdletters als het eenvoudige namen zijn, anders zoals geschreven | `identifier_renamed` |
| names over 128 bytes | ingekort | `name_shortened` |
| GEOMETRY, POINT, POLYGON... | BLOB met WKB | `geometry_as_blob` |
| INET4, INET6, UUID (MariaDB) | VARCHAR2(39), VARCHAR2(36) |  |
| BINARY, VARBINARY, BLOB | RAW tot 2000 bytes, anders 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` |
| 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 | BLOB met WKB | `geometry_inferred` |
| _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 | CLOB | `unknown_type` |
| values that don't fit their column | NULL | `invalid_value_null` |
| unreadable geometries | NULL | `bad_geometry` |
| dumps of several databases | één schema, elke tabel met de naam van zijn database ervoor | `databases_merged` |
| CREATE SEQUENCE (MariaDB) | CREATE SEQUENCE, op de waarde die hij had bereikt |  |
| VECTOR(n) (MariaDB 11.7+) | CLOB met de floats als JSON-array | `type_replaced` |

## Het script in Oracle 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
NLS_LANG=.AL32UTF8 sqlplus -S -L user@//localhost/mydb @mysql.oracle.sql
```

Refererende sleutels worden toegevoegd met ENABLE NOVALIDATE, zodat nieuwe rijen meteen worden gecontroleerd, en daarna gevalideerd. Verwijst een oude rij naar een rij die niet bestaat, dan vertelt het script welke constraint het is en laat het die ongevalideerd, in plaats van halverwege te mislukken.

Voer bij een grote dump SQL*Plus uit op dezelfde machine als de database. Het script commit elke 100 rijen. De gebruiker die het uitvoert, heeft CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER en CREATE PROCEDURE nodig, en quota op zijn tablespace.

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

## Vragen over MySQL naar Oracle

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

Oracle kent geen nuldatum, dus ze worden NULL en de kolom accepteert NULL. Het rapport vermeldt hoeveel er in elke kolom waren. Lege strings worden ook NULL, zoals Oracle ze opslaat.

### Blijven AUTO_INCREMENT-waarden behouden?

Ja. Elke AUTO_INCREMENT-kolom wordt een identity-kolom, elke rij behoudt zijn id, en het volgende id gaat verder na het hoogste, of na de AUTO_INCREMENT van de tabel als die hoger is.

### Wordt TINYINT(1) boolean?

Oracle vóór 23ai heeft geen boolean-kolom. Een kolom met alleen 0 of 1 wordt NUMBER(1) met een check die dat zo houdt; een kolom met andere getallen behoudt ze, en het rapport legt uit waarom.

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

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

Oracle 19c en later. Elke testdump laadt op 21c en 23ai 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 SQLite](https://intosql.com/nl/mysql-naar-sqlite)
- [MySQL naar SQL Server](https://intosql.com/nl/mysql-naar-sql-server)

## Naar Oracle

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

## Handleiding en elke combinatie

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