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