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

# MySQL naar SQL Server migreren in je browser

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

[Migratiehandleiding MySQL naar SQL Server](https://intosql.com/docs/migrations/mysql-to-sql-server)

[Datatypen van MySQL naar SQL Server](https://intosql.com/docs/types/mysql-to-sql-server)

## Wat er verandert van MySQL naar SQL Server

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 SQL Server | Rapportregel |
| --- | --- | --- |
| TINYINT(1), BOOL | bit als elke waarde 0 of 1 is, anders smallint | `bool_kept_numeric` |
| UNSIGNED integers | TINYINT UNSIGNED als tinyint; de andere als het eerstvolgende bredere gehele getal met een CHECK dat het niet negatief is, BIGINT UNSIGNED als bigint als elke waarde past, anders decimal(38,0) | `unsigned_widened` |
| ZEROFILL and display widths | weggelaten | `zerofill_dropped` |
| FLOAT(M,D) | real of float, zonder de schaal | `float_scale_dropped` |
| DECIMAL(p,s) | decimal(p,s) tot 38 cijfers; daarboven nvarchar | `decimal_as_text` |
| BIT(1), BIT(n) | bit; bigint tot 63 bits; decimal(20,0) 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` |
| DEFAULT '0000-00-00' | geen standaardwaarde | `zero_date_default` |
| TIME | time als elke waarde binnen een dag valt, anders nvarchar | `time_as_interval` |
| YEAR | smallint met een CHECK op het bereik |  |
| CHAR(n), VARCHAR(n) | nvarchar(n) |  |
| text with characters past U+FFFF (emoji) in VARCHAR(n) | nvarchar(2n), of nvarchar(max) boven 4000 | `text_length_widened` |
| DATETIME | datetime2 |  |
| TIMESTAMP | datetimeoffset in de tijdzone die de dump vermeldt, UTC als die er geen vermeldt | `timestamp_zone_assumed` |
| ENUM | nvarchar 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 | nvarchar zoals MySQL het schrijft ('a,b') |  |
| JSON | nvarchar(max) |  |
| 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 | IDENTITY, met de teller 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 AFTER UPDATE-trigger | `on_update_trigger` |
| ON UPDATE CURRENT_TIMESTAMP on a table without a primary key | niet overgenomen | `on_update_without_key` |
| generated columns | berekende kolommen, PERSISTED als de bron ze opslaat |  |
| generated columns with functions SQL Server lacks | een gewone kolom | `generated_not_translated` |
| INVISIBLE columns | gewone kolommen | `invisible_column` |
| CHECK constraints | vertaald, inline in CREATE TABLE |  |
| CHECK constraints with functions SQL Server lacks | niet aangemaakt | `check_skipped` |
| CHECK ... NOT ENFORCED | niet aangemaakt | `check_not_enforced` |
| defaults with functions SQL Server lacks | geen standaardwaarde | `default_not_translated` |
| keys and indexes on a prefix, c(20) | een index op de hele kolom | `prefix_whole_column` |
| FULLTEXT indexes | niet aangemaakt | `fulltext_not_created` |
| SPATIAL indexes | niet aangemaakt | `spatial_index_not_created` |
| functional indexes, and indexes on columns of unlimited length | niet aangemaakt | `index_skipped` |
| foreign keys | na de data, WITH NOCHECK, daarna gecontroleerd met een waarschuwing bij wezen |  |
| ON DELETE or ON UPDATE that cascades in a cycle or along a second path | NO ACTION | `foreign_key_action_dropped` |
| foreign keys to columns without a unique key | niet aangemaakt | `foreign_key_skipped` |
| table and column names | zoals geschreven; hernoemd als ze alleen in hoofdletters verschillen | `identifier_renamed` |
| names over 116 characters | ingekort | `name_shortened` |
| GEOMETRY, POINT, POLYGON... | geometry, met de SRID van elke waarde |  |
| INET4, INET6, UUID (MariaDB) | nvarchar(39), uniqueidentifier |  |
| BINARY, VARBINARY, BLOB | binary, varbinary, varbinary(max) |  |
| 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 | geometry |  |
| _ci collations | de collatie van de database, meestal hoofdletterongevoelig |  |
| 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 | nvarchar(max) | `unknown_type` |
| values that don't fit their column | NULL | `invalid_value_null` |
| unreadable geometries | NULL | `bad_geometry` |
| CREATE SEQUENCE (MariaDB) | CREATE SEQUENCE ... AS bigint, met de volgende waarde |  |
| VECTOR(n) (MariaDB 11.7+) | nvarchar(max) met de floats als JSON-array | `type_replaced` |

## Het script in SQL Server 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
sqlcmd -b -f 65001 -S localhost -d mydb -i mysql.sql_server.sql
```

Refererende sleutels worden toegevoegd met WITH NOCHECK en daarna gecontroleerd. Verwijst een rij naar een rij die niet bestaat, dan vertelt het script welke constraint het is en laat het die ongecontroleerd, in plaats van halverwege te mislukken.

Voer bij een grote dump sqlcmd uit op dezelfde machine als de server. Elke batch van maximaal 1000 rijen wordt apart gecommit, zodat het transactielogboek klein blijft.

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

## Vragen over MySQL naar SQL Server

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

SQL Server kent geen nuldatum, dus ze worden NULL en de kolom accepteert NULL. Het rapport vermeldt hoeveel er in elke kolom waren.

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

Het wordt alleen bit als elke waarde in de kolom 0 of 1 is. Bevat hij andere getallen, zoals 2 of -1, dan blijft het een getal en legt het rapport uit waarom, zodat geen waarde per ongeluk 1 wordt.

### 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 SQL Server-trigger.

### Op welke SQL Server-versies laadt het script?

SQL Server 2017 tot en met 2025. Hetzelfde script laadt op elk ervan 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 Oracle](https://intosql.com/nl/mysql-naar-oracle)

## Naar SQL Server

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

## Handleiding en elke combinatie

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