---
title: "MariaDB zu SQL Server migrieren, im Browser"
description: "Migriere eine MariaDB-Datenbank zu SQL Server: Ihr Dump wird ein Skript mit denselben Tabellen, Schlüsseln, Sequenzen und Daten, plus Bericht über jede Änderung."
canonical: https://intosql.com/de/mariadb-in-sql-server
last_updated: 2026-10-15
---

# MariaDB zu SQL Server migrieren, im Browser

Leg einen Dump aus mariadb-dump, mysqldump, phpMyAdmin oder Adminer ab, als .sql oder .sql.gz, und lade ein SQL Server-Skript mit denselben Tabellen, Schlüsseln, Indizes und Daten herunter. Jeder Wert, den SQL Server nicht unverändert aufnehmen kann, und jedes Objekt, das es nicht übernimmt, steht im Bericht.

[Leitfaden: MariaDB zu SQL Server migrieren](https://intosql.com/docs/migrations/mariadb-to-sql-server)

[Datentypen von MariaDB zu SQL Server](https://intosql.com/docs/types/mariadb-to-sql-server)

## Was sich von MariaDB zu SQL Server ändert

Jede Zeile ist eine Regel, die der Konverter anwendet, mit der Berichtszeile, die er schreibt, wenn die Regel etwas an deinen Daten ändert.

| In MariaDB | In SQL Server | Berichtszeile |
| --- | --- | --- |
| TINYINT(1), BOOL | bit, wenn jeder Wert 0 oder 1 ist, sonst smallint | `bool_kept_numeric` |
| UNSIGNED integers | TINYINT UNSIGNED als tinyint; die anderen als nächstgrößerer Ganzzahltyp mit einem CHECK gegen negative Werte, BIGINT UNSIGNED als bigint, wenn jeder Wert passt, sonst decimal(38,0) | `unsigned_widened` |
| ZEROFILL and display widths | entfernt | `zerofill_dropped` |
| FLOAT(M,D) | real oder float, ohne die Nachkommastellen | `float_scale_dropped` |
| DECIMAL(p,s) | decimal(p,s) bis 38 Stellen; darüber nvarchar | `decimal_as_text` |
| BIT(1), BIT(n) | bit; bigint bis 63 Bit; decimal(20,0) für 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 entfernt | `not_null_relaxed` |
| DEFAULT '0000-00-00' | kein Standardwert | `zero_date_default` |
| TIME | time, wenn jeder Wert innerhalb eines Tages liegt, sonst nvarchar | `time_as_interval` |
| YEAR | smallint mit einem CHECK seines Bereichs |  |
| CHAR(n), VARCHAR(n) | nvarchar(n) |  |
| text with characters past U+FFFF (emoji) in VARCHAR(n) | nvarchar(2n), oder nvarchar(max) über 4000 | `text_length_widened` |
| DATETIME | datetime2 |  |
| TIMESTAMP | datetimeoffset in der Zeitzone, die der Dump angibt, UTC, wenn er keine angibt | `timestamp_zone_assumed` |
| ENUM | nvarchar mit einem CHECK der erlaubten Werte |  |
| ENUM holding '' (MySQL's error value) | der leere Wert, von der CHECK-Bedingung erlaubt | `enum_invalid_value` |
| ENUM holding values outside its list | kein CHECK | `enum_check_skipped` |
| SET | nvarchar, wie MySQL es schreibt ('a,b') |  |
| JSON | nvarchar(max) |  |
| NUL bytes in text | beibehalten |  |
| text that isn't valid in its character set | die fehlerhaften Bytes als Ersatzzeichen | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | unverändert kopiert | `mojibake_suspected` |
| AUTO_INCREMENT | IDENTITY, mit dem Zähler hinter den kopierten IDs |  |
| MyISAM AUTO_INCREMENT on the second column of a key | ein Zähler für die Tabelle | `myisam_group_autoincrement` |
| ON UPDATE CURRENT_TIMESTAMP | ein Trigger mit AFTER UPDATE | `on_update_trigger` |
| ON UPDATE CURRENT_TIMESTAMP on a table without a primary key | nicht übernommen | `on_update_without_key` |
| generated columns | berechnete Spalten, PERSISTED, wenn die Quelle sie speichert |  |
| generated columns with functions SQL Server lacks | eine normale Spalte | `generated_not_translated` |
| INVISIBLE columns | normale Spalten | `invisible_column` |
| CHECK constraints | übersetzt, inline in CREATE TABLE |  |
| CHECK constraints with functions SQL Server lacks | nicht angelegt | `check_skipped` |
| CHECK ... NOT ENFORCED | nicht angelegt | `check_not_enforced` |
| defaults with functions SQL Server lacks | kein Standardwert | `default_not_translated` |
| keys and indexes on a prefix, c(20) | ein Index auf der ganzen Spalte | `prefix_whole_column` |
| FULLTEXT indexes | nicht angelegt | `fulltext_not_created` |
| SPATIAL indexes | nicht angelegt | `spatial_index_not_created` |
| functional indexes, and indexes on columns of unlimited length | nicht angelegt | `index_skipped` |
| foreign keys | nach den Daten, WITH NOCHECK, dann geprüft, mit einer Warnung bei verwaisten Zeilen |  |
| 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 | nicht angelegt | `foreign_key_skipped` |
| table and column names | wie geschrieben; umbenannt, wenn sie sich nur in der Groß-/Kleinschreibung unterscheiden | `identifier_renamed` |
| names over 116 characters | gekürzt | `name_shortened` |
| GEOMETRY, POINT, POLYGON... | geometry, mit der SRID jedes Werts |  |
| INET4, INET6, UUID (MariaDB) | nvarchar(39), uniqueidentifier |  |
| BINARY, VARBINARY, BLOB | binary, varbinary, varbinary(max) |  |
| PARTITION BY | eine Tabelle | `partitions_dropped` |
| WITH SYSTEM VERSIONING (MariaDB) | eine Tabelle mit den aktuellen Zeilen | `system_versioning_dropped` |
| MyISAM, MEMORY and other engines | eine normale Tabelle | `engine_dropped` |
| views, triggers, procedures, functions and events | im Bericht aufgeführt | `not_converted_objects` |
| dumps without CREATE TABLE | Typen aus den Werten gelesen | `no_schema` |
| geometries in a dump without CREATE TABLE | geometry |  |
| _ci collations | die Kollation der Datenbank, meist ohne Groß-/Kleinschreibung |  |
| SET NAMES utf8 from utf8mb4 tables | konvertiert, mit einer Warnung | `dump_lost_four_byte_chars` |
| dumps without SET NAMES whose text isn't UTF-8 | als Latin-1 (Windows-1252) gelesen | `charset_guessed` |
| sjis, cp932, gbk, big5 dumps | als UTF-8 gelesen, mit einer Warnung | `unsupported_charset` |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | ausgewertet |  |
| other expressions in rows | NULL | `expression_value` |
| DEFAULT in VALUES | der Standardwert der Spalte | `default_keyword_filled` |
| DEFAULT in VALUES without a literal default | NULL | `default_keyword_null` |
| REPLACE and INSERT IGNORE | normale Zeilen | `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, mit ihrem nächsten Wert |  |
| VECTOR(n) (MariaDB 11.7+) | nvarchar(max) mit den Gleitkommazahlen als JSON-Array | `type_replaced` |

## Das Skript in SQL Server laden

Das Skript legt die Tabellen an, kopiert die Zeilen und fügt dann Schlüssel, Indizes und Fremdschlüssel hinzu, so lädt es schnell und hält beim ersten Fehler an.

```shell
sqlcmd -b -f 65001 -S localhost -d mydb -i mariadb.sql_server.sql
```

Fremdschlüssel werden mit WITH NOCHECK hinzugefügt und dann geprüft. Verweist eine Zeile auf eine nicht vorhandene Zeile, nennt das Skript den Fremdschlüssel und lässt ihn ungeprüft, statt auf halbem Weg abzubrechen.

Führe bei einem großen Dump sqlcmd auf dem Rechner des Servers aus. Jeder Stapel von bis zu 1000 Zeilen wird einzeln festgeschrieben, so bleibt das Transaktionsprotokoll klein.

## Den MariaDB-Dump für das beste Ergebnis erstellen

Der Konverter liest, was der Dump enthält. Mit diesen Optionen bleibt mehr von deinen Daten darin:

- --default-character-set=utf8mb4 bewahrt Emoji und andere 4-Byte-Zeichen, die ein utf8mb3-Dump verliert, bevor der Konverter ihn sieht.
- --hex-blob schreibt Binärspalten und VECTOR-Werte hexadezimal, was das Kopieren zwischen Systemen übersteht.
- --routines --triggers --events fügen diese Objekte dem Dump hinzu, damit der Bericht sie auflisten kann.

## Was nicht konvertiert wird

Sichten, Trigger, gespeicherte Prozeduren, Funktionen und Ereignisse sind in der eigenen Sprache von MariaDB geschrieben. Sie stehen mit Namen im Bericht und werden nie stillschweigend weggelassen, damit du sie für SQL Server neu schreiben kannst.

## Fragen zu MariaDB zu SQL Server

### Wird mein Dump hochgeladen?

Nein. Der Konverter läuft in deinem Browser und liest den Dump stückweise von deiner Festplatte, daher verlässt er nie deinen Computer. Die Desktop-App und die Kommandozeile konvertieren ebenfalls auf deinem Computer.

### Wie groß darf der Dump sein?

Der Konverter hält nie den ganzen Dump im Speicher: Er liest die Datei zweimal, in Abschnitten, und schreibt das Skript fortlaufend. Dumps von mehreren Gigabyte werden im Browser, in der Desktop-App und mit der Kommandozeile konvertiert.

### Aus welchen MariaDB-Versionen kann der Dump stammen?

Dumps aus mariadb-dump und mysqldump auf MariaDB 10.3 bis 12, mit einem INSERT pro Tabelle oder einem pro Zeile. Jeder Test-Dump stammt aus MariaDB 10.11, 11.4 und 11.8 und wird Zelle für Zelle mit seiner Quelle verglichen.

### Bleiben UUID-, INET6-, JSON- und VECTOR-Spalten erhalten?

UUID wird uniqueidentifier, INET-Spalten nvarchar, JSON nvarchar(max) und VECTOR ein JSON-Array seiner Gleitkommazahlen. Null-Daten werden NULL, und der Bericht zählt sie.

### Bleiben AUTO_INCREMENT-Werte und Sequenzen erhalten?

Ja. Jede AUTO_INCREMENT-Spalte wird eine IDENTITY-Spalte, die nach der höchsten ID weitermacht. Sequenzen werden SQL Server-Sequenzen, und Standardwerte, die aus einer Sequenz ziehen, ziehen weiter aus ihr.

### Was ist mit gespeicherten Prozeduren und Triggern?

Sie stehen mit Namen im Bericht und werden nicht konvertiert, weil jede Datenbank sie in ihrer eigenen Sprache schreibt.

### Auf welchen SQL Server-Versionen lädt das Skript?

SQL Server 2017 bis 2025. Dasselbe Skript lädt auf jeder Version und hält beim ersten Fehler an, falls etwas schiefgeht.

## Aus MariaDB

- [MariaDB zu PostgreSQL](https://intosql.com/de/mariadb-in-postgresql)
- [MariaDB zu MySQL](https://intosql.com/de/mariadb-in-mysql)
- [MariaDB zu MariaDB](https://intosql.com/de/mariadb-in-mariadb)
- [MariaDB zu SQLite](https://intosql.com/de/mariadb-in-sqlite)
- [MariaDB zu Oracle](https://intosql.com/de/mariadb-in-oracle)

## Nach SQL Server

- [MySQL zu SQL Server](https://intosql.com/de/mysql-in-sql-server)
- [PostgreSQL zu SQL Server](https://intosql.com/de/postgresql-in-sql-server)
- [SQL Server zu SQL Server](https://intosql.com/de/sql-server-in-sql-server)
- [SQLite zu SQL Server](https://intosql.com/de/sqlite-in-sql-server)
- [Oracle zu SQL Server](https://intosql.com/de/oracle-in-sql-server)

## Leitfaden und alle Paare

- [SQL Server zu MariaDB](https://intosql.com/de/sql-server-in-mariadb)
- [Leitfaden: MariaDB zu SQL Server migrieren](https://intosql.com/docs/migrations/mariadb-to-sql-server)
- [Datentypen von MariaDB zu SQL Server](https://intosql.com/docs/types/mariadb-to-sql-server)
- [Alle Datenbankpaare](https://intosql.com/de/datenbankmigration)
