SQL Server
MySQL

MSSQL to MySQL Converter

Schema, indexes, foreign keys and rows into MySQL, MariaDB, or Percona Server - on-prem or managed - once, or on a schedule while you cut over.

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

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

  • Reads SQL Server on-prem, SQL Server Express, Azure SQL, or Amazon RDS for SQL Server.
  • Writes to MySQL, MariaDB, or Percona Server - on-prem, Amazon RDS / Aurora MySQL, Azure Database for MySQL, or Google Cloud SQL.
  • Converts the database once, or keeps SQL Server and MySQL 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 SQL Server instance and a live MySQL server, 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 .bak file to restore and no generated script to run by hand - the tool reads the SQL Server instance directly and writes to the MySQL server. Windows Authentication or a SQL login, over TCP/IP or Named Pipes.

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 SQL Server and MySQL 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 MySQL.

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 MySQL is the right target

License cost

SQL Server Standard and Enterprise are licensed per core, with Software Assurance on top. MySQL Community, MariaDB, and Percona Server carry no per-core fee on any size of box.

What the application expects

The move is often driven by the stack around the database: a hosting provider, CMS, or SaaS integration that expects MySQL or MariaDB rather than SQL Server.

Managed cloud options

MySQL-compatible targets exist across Amazon RDS, Amazon Aurora MySQL, Azure Database for MySQL, and Google Cloud SQL, so the migration is often part of moving into a managed database.

Lighter operational footprint

MySQL and MariaDB are common choices for small and mid-size web applications where the database has to be easy to host, replicate, and hand to a standard web operations team.

What needs attention

How DBConvert handles the SQL Server → MySQL differences

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

In SQL Server Why it does not carry over What DBConvert does
Keys and identity
IDENTITY MySQL generates keys from a column attribute rather than from a seed and increment declared on the table. The primary key is created as AUTO_INCREMENT and reseeded above the highest loaded value, so the application's next insert does not collide with a migrated row.
UNIQUEIDENTIFIER MySQL has no GUID type, so the value has to be stored as text or as bytes. Created as CHAR(36) holding the same digits and dashes SQL Server shows, so a GUID compared as a string still matches. Choose BINARY(16) in the review when you would rather have the compact form.
Numbers
BIT SQL Server's BIT is a one-bit column; MySQL's boolean is an integer. Converted to TINYINT(1), which is what MySQL clients read back as a boolean.
MONEY, SMALLMONEY MySQL has no money type. Mapping either one to a floating-point column would round amounts that have to stay exact. Both land on fixed-point DECIMAL - MONEY as DECIMAL(19,4) and SMALLMONEY as DECIMAL(10,4) - keeping the four decimal places and the full range of each.
Date and time
DATETIME2, TIME SQL Server stores up to 100 ns; MySQL stores fractional seconds only when the column declares how many, and stops at microseconds. The declared scale comes across, capped at the six digits MySQL supports: DATETIME2(7) becomes DATETIME(6) and TIME(7) becomes TIME(6). A column declared with no fraction stays without one.
DATETIMEOFFSET The value carries a UTC offset with it. MySQL has no type that stores one, so the offset has to go somewhere or the instant stops being knowable. Converted to UTC and written as DATETIME(6), so every row means the same instant it meant before. Rows from different zones become directly comparable, which they were not in the source.
Text
NVARCHAR, NCHAR SQL Server keeps Unicode in the N types and everything else in the database's code page, where anything outside it was already lost before the migration started. The destination is created as utf8mb4, so Cyrillic, CJK and emoji arrive byte for byte. A VARCHAR column that lost characters to its own code page arrives exactly as it reads in SQL Server - the migration neither repairs that nor makes it worse.
NVARCHAR(max), VARCHAR(max) The max forms hold up to 2 GB, which no bounded MySQL character type can take. Created as LONGTEXT.
XML MySQL has no XML type, and the source stores the document as UTF-16 rather than as bytes in the target's charset. Transcoded and written to LONGTEXT, so the document stays readable text that MySQL's own string and ExtractValue functions can work on.
Structure
Schemas SQL Server nests schemas inside a database; in MySQL the database is the namespace, so dbo.Orders and sales.Orders would collide. Schemas collapse into the MySQL database, or the schema name is folded into a table-name prefix when you want the separation to stay visible.
Identifier quoting SQL Server quotes reserved or spaced names with brackets, which MySQL does not accept. Bracketed identifiers such as [Order] are rewritten into MySQL backtick form, and every destination name stays editable in the review.
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 - SQL Server and MySQL is one of only three pairs with two-way translation. See views translation for what is covered.

Procedural code stays behind

The migration covers tables - their fields, types, defaults, and indexes - the views between dialects, and the foreign keys. T-SQL stored procedures, functions, triggers, and table-valued parameters stay in the source and are rewritten by hand in MySQL's stored-procedure dialect: MERGE, TOP, table-valued parameters, and system functions such as GETDATE() have no direct MySQL equivalent. On most schemas this is a small share of the work, and it is rewrite work on any route.

You see every column before a row moves

The review lists every column of the table with the MySQL type it will get, and every name and type stays editable. The decisions worth checking are visible here: nvarchar columns become VARCHAR in utf8mb4, so the Unicode survives, numeric lands on DECIMAL rather than a floating-point type, and the header counts how many columns you have renamed or retyped before anything runs.

DBConvert type-mapping review for a SQL Server to MySQL conversion, listing every column with the MySQL type it will get

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.

Comparing this with MySQL Workbench? The two, side by side →

Supported versions and services

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

MySQL

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

How to migrate SQL Server to MySQL

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

1

Connect to SQL Server source database

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

Connect to SQL Server source database from DBConvert

SQL Server source

Connect by TCP/IP or Named Pipes, use Azure SQL, or read from Amazon RDS for SQL Server.

2

Connect to MySQL destination database

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

Connect to MySQL target database from DBConvert

MySQL target

Use the MySQL connection guide for local MySQL or MariaDB, or Amazon RDS / Aurora for MySQL, Azure Database for MySQL, or Google Cloud SQL for MySQL. Create the target schema as utf8mb4.

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 SQL Server data into MySQL

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

Windows Windows 10 or later · 24.3 MB