MySQL
SQL Server

MySQL to SQL Server Converter

Schema, indexes, foreign keys and rows into SQL Server, Azure SQL, or Amazon RDS - once, or on a schedule while you cut over.

Version
5.0.42
Release Date
Sept. 12, 2026
Size
24.3 MB

Copy a MySQL database into SQL Server without writing the target schema by hand. DBConvert connects to both servers, proposes a SQL Server type for every column, and creates the tables, indexes, and foreign keys before it moves a row.

  • Reads MySQL, MariaDB, or Percona Server - on-prem, Amazon RDS / Aurora MySQL, Azure Database for MySQL, or Google Cloud SQL.
  • Writes to SQL Server 2008-2022, SQL Server Express, Azure SQL, or Amazon RDS for SQL Server.
  • Converts the database once, or keeps MySQL and SQL Server synchronized on a schedule, in one direction or both.
  • Runs on Windows as a desktop application - nothing is uploaded to a web service.
How it runs

A Windows application that talks to both servers

You install it, point it at a live MySQL server and a live SQL Server instance, and it does the work in place.

Windows desktop

A native Windows application with a wizard, installed on your own machine. Your credentials and your data never pass through a third-party service.

Live connections, not files

Both ends are database connections. There is no mysqldump file to import and no generated script to run by hand - the tool reads the MySQL server directly and writes to SQL Server, over Windows Authentication or a SQL login.

Saved and repeatable

A job stores both connections, the table selection, and the options. Run it again from the interface, or start it by name from a batch file or Task Scheduler with --run-job.

Two modes, one download

Convert once, or keep MySQL and SQL Server connected

One download covers both. You choose the mode when you set up the job.

One-time conversion

Schema, indexes, foreign keys and rows in one pass, with the type mapping you reviewed.

  • A large table is split into ranges and copied by several threads at once.
  • The run reports rows received per table - compare them against the source before you switch the application over to SQL Server.

Repeat synchronization

Keep both databases in use while you cut over.

  • Run the job on a schedule, in one direction or in both.
  • Only the rows that changed since the last run move.
  • Each synchronized table needs a primary key or a unique non-composite index, so the two sides can be matched.
Why move

When SQL Server is the right target

One stack instead of two

The database joins the environment the rest of the application already lives in: .NET services authenticating with the same Windows or Entra ID accounts, instead of a second set of drivers and database-only logins to keep in step.

Reporting on the Microsoft side

Power BI, SSRS and Analysis Services connect to SQL Server as a first-class source, without installing a separate database connector on every machine that builds a report.

Azure SQL as the managed tier

When the application already runs in Azure, Azure SQL Database or SQL Managed Instance keeps identity, networking, and backups on the same platform as everything around it.

What needs attention

How DBConvert handles the MySQL → SQL Server differences

Every mapping below is a default you can review or override per column before the run.

In MySQL Why it does not carry over What DBConvert does
Keys and identity
AUTO_INCREMENT SQL Server generates keys from an IDENTITY property with its own seed, and the counter is not part of the column definition. The primary key is created as IDENTITY and reseeded with DBCC CHECKIDENT above the highest loaded value, so the application's next insert does not collide with a migrated row.
Numbers
TINYINT(1) MySQL uses the same declaration for a true boolean and for a small integer code, and only your data says which it is. Proposed as BIT. Override it to TINYINT in the review when the column stores codes rather than 0/1.
Date and time
DATETIME(n), TIME(n) MySQL stops at microseconds; SQL Server's DATETIME is coarser still, while DATETIME2 goes finer. The declared scale comes across into DATETIME2(n) - DATETIME(6) becomes DATETIME2(6) - rather than the legacy DATETIME, which would round to 3.33 ms.
TIMESTAMP A MySQL TIMESTAMP is stored as UTC and rendered in the session time zone; a SQL Server DATETIME2 carries no zone at all. Converted to DATETIMEOFFSET, which keeps the zone with the value instead of leaving the instant to be guessed from a session setting.
Text and structured values
utf8mb4 text SQL Server keeps Unicode in the N types; a plain VARCHAR there stores only what the database's code page covers, so Cyrillic, CJK and emoji would be replaced by question marks. Text columns are created as NVARCHAR and NCHAR, so the full range survives the move regardless of the destination collation.
JSON SQL Server has no JSON column type; it validates and queries JSON held as text. Stored as NVARCHAR(MAX), which is what ISJSON, JSON_VALUE and OPENJSON read.
ENUM, SET MySQL declares both inline on the column. SQL Server has neither. The values come across as text. Turning them into a lookup table or a CHECK constraint is a schema decision, so it is left to you rather than guessed.
Structure
Identifier quoting MySQL quotes reserved or spaced names with backticks, which SQL Server does not accept, and MySQL has no schema layer under the database. Backtick names such as `order` are rewritten into bracket form ([order]), and objects land in dbo unless you pick another schema before the load.
Views A view is stored SQL, and the two dialects disagree on function names, quoting, and paging syntax. View definitions are translated between the two dialects in both directions - MySQL and SQL Server is one of only three pairs with two-way translation. See views translation for what is covered.

Procedural code and application SQL stay behind

The migration covers tables - their fields, types, defaults, and indexes - the views between dialects, and the foreign keys. MySQL stored procedures, functions, and triggers stay in the source and are rewritten by hand in T-SQL, which has a different procedural model: no DELIMITER, different error handling, different cursors. The application's own SQL is the same kind of work - LIMIT/OFFSET, INSERT ... ON DUPLICATE KEY UPDATE, GROUP_CONCAT, IFNULL and case-insensitive LIKE do not run unchanged on SQL Server. On most schemas both are a small share of the work, and it is rewrite work on any route.

If you need continuous replication instead

Scheduled synchronization is enough for a staged cut-over that runs for days or weeks. When the source has to stay live and every change must land within seconds, that is log-based change data capture, and it is a different product: DBConvert Streams replicates continuously and runs anywhere.

Supported versions and services

MySQL

  • MySQL 5.x, 8.x; MariaDB; Percona Server
  • Amazon RDS / Aurora MySQL, Azure Database for MySQL, Google Cloud SQL

SQL Server

  • SQL Server 2008-2022, including Express editions
  • Azure SQL Database and Amazon RDS for SQL Server
  • SQL Server schemas (dbo, custom schemas)
  • Windows authentication or SQL authentication

How to migrate MySQL to SQL Server

DBConvert opens in GUI mode and walks the job from connection to commit:

1

Connect to MySQL source database

Specify the username/password and host/port parameters if your source database requires login credentials.

Connect to MySQL source database from DBConvert

MySQL source

Use the MySQL connection guide for MySQL, MariaDB, Percona, Amazon RDS / Aurora, Azure Database for MySQL, or Google Cloud SQL.

2

Connect to SQL Server destination database

Specify parameters for the destination database similar to the source, defining connection settings and username/password pairs.

Connect to SQL Server target database from DBConvert

SQL Server target

Use SQL Server connection settings. Azure SQL requires SSL on port 1433; Amazon RDS for SQL Server normally uses SQL authentication.

Steps 3-6: the same for every database pair

Source and target are connected - steps 1 and 2 above. What follows is identical whichever two databases you picked, so it lives in one place. Each step below opens at its own section.

Open the full guide

All four steps in one page, plus software features, command-line mode, scheduler, and system requirements.

See all features

Move MySQL data into SQL Server

Download the current build and run the first job against your own database.

Windows Windows 10 or later · 24.3 MB