---
title: "Миграция MariaDB в SQL Server в браузере"
description: "Миграция базы MariaDB в SQL Server: ее дамп превращается в скрипт с теми же таблицами, ключами, последовательностями и данными и отчетом о каждом изменении."
canonical: https://intosql.com/ru/mariadb-v-sql-server
last_updated: 2026-10-15
---

# Миграция MariaDB в SQL Server в браузере

Перетащите дамп из mariadb-dump, mysqldump, phpMyAdmin или Adminer в формате .sql или .sql.gz и скачайте скрипт SQL Server с теми же таблицами, ключами, индексами и данными. Каждое значение, которое SQL Server не может хранить как есть, и каждый объект, который он не переносит, указаны в отчете.

[Руководство по миграции MariaDB в SQL Server](https://intosql.com/docs/migrations/mariadb-to-sql-server)

[Типы данных из MariaDB в SQL Server](https://intosql.com/docs/types/mariadb-to-sql-server)

## Что меняется при переходе с MariaDB на SQL Server

Каждая строка - это правило, которое применяет конвертер, и строка отчета, которую он пишет, когда правило что-то меняет в ваших данных.

| В MariaDB | В SQL Server | Строка отчета |
| --- | --- | --- |
| TINYINT(1), BOOL | bit, если каждое значение 0 или 1, иначе smallint | `bool_kept_numeric` |
| UNSIGNED integers | TINYINT UNSIGNED как tinyint; остальные как следующий более широкий целый тип с CHECK на неотрицательность, BIGINT UNSIGNED как bigint, если все значения помещаются, иначе decimal(38,0) | `unsigned_widened` |
| ZEROFILL and display widths | удаляется | `zerofill_dropped` |
| FLOAT(M,D) | real или float, без масштаба | `float_scale_dropped` |
| DECIMAL(p,s) | decimal(p,s) до 38 цифр; дальше nvarchar | `decimal_as_text` |
| BIT(1), BIT(n) | bit; bigint до 63 бит; decimal(20,0) для 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 снимается | `not_null_relaxed` |
| DEFAULT '0000-00-00' | без значения по умолчанию | `zero_date_default` |
| TIME | time, если каждое значение укладывается в сутки, иначе nvarchar | `time_as_interval` |
| YEAR | smallint с CHECK диапазона |  |
| CHAR(n), VARCHAR(n) | nvarchar(n) |  |
| text with characters past U+FFFF (emoji) in VARCHAR(n) | nvarchar(2n) или nvarchar(max) свыше 4000 | `text_length_widened` |
| DATETIME | datetime2 |  |
| TIMESTAMP | datetimeoffset в часовом поясе, указанном в дампе, или UTC, если он не указан | `timestamp_zone_assumed` |
| ENUM | nvarchar с CHECK значений |  |
| ENUM holding '' (MySQL's error value) | пустое значение, которое допускает проверка | `enum_invalid_value` |
| ENUM holding values outside its list | без CHECK | `enum_check_skipped` |
| SET | nvarchar в записи MySQL ('a,b') |  |
| JSON | nvarchar(max) |  |
| NUL bytes in text | сохраняется |  |
| text that isn't valid in its character set | неверные байты заменяются символом замены | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | копируется как есть | `mojibake_suspected` |
| AUTO_INCREMENT | IDENTITY, счетчик выставлен после скопированных id |  |
| MyISAM AUTO_INCREMENT on the second column of a key | один счетчик на таблицу | `myisam_group_autoincrement` |
| ON UPDATE CURRENT_TIMESTAMP | триггер AFTER UPDATE | `on_update_trigger` |
| ON UPDATE CURRENT_TIMESTAMP on a table without a primary key | не переносится | `on_update_without_key` |
| generated columns | вычисляемые столбцы, PERSISTED, если источник их хранит |  |
| generated columns with functions SQL Server lacks | обычный столбец | `generated_not_translated` |
| INVISIBLE columns | обычные столбцы | `invisible_column` |
| CHECK constraints | переводится, внутри CREATE TABLE |  |
| CHECK constraints with functions SQL Server lacks | не создается | `check_skipped` |
| CHECK ... NOT ENFORCED | не создается | `check_not_enforced` |
| defaults with functions SQL Server lacks | без значения по умолчанию | `default_not_translated` |
| keys and indexes on a prefix, c(20) | индекс по всему столбцу | `prefix_whole_column` |
| FULLTEXT indexes | не создается | `fulltext_not_created` |
| SPATIAL indexes | не создается | `spatial_index_not_created` |
| functional indexes, and indexes on columns of unlimited length | не создается | `index_skipped` |
| foreign keys | после данных WITH NOCHECK, затем проверка с предупреждением о строках без родителя |  |
| 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 | не создается | `foreign_key_skipped` |
| table and column names | как в источнике; переименовываются, если отличаются только регистром | `identifier_renamed` |
| names over 116 characters | сокращается | `name_shortened` |
| GEOMETRY, POINT, POLYGON... | geometry, с SRID каждого значения |  |
| INET4, INET6, UUID (MariaDB) | nvarchar(39), uniqueidentifier |  |
| BINARY, VARBINARY, BLOB | binary, varbinary, varbinary(max) |  |
| PARTITION BY | одна таблица | `partitions_dropped` |
| WITH SYSTEM VERSIONING (MariaDB) | таблица с текущими строками | `system_versioning_dropped` |
| MyISAM, MEMORY and other engines | обычная таблица | `engine_dropped` |
| views, triggers, procedures, functions and events | перечисляются в отчете | `not_converted_objects` |
| dumps without CREATE TABLE | типы определяются по значениям | `no_schema` |
| geometries in a dump without CREATE TABLE | geometry |  |
| _ci collations | сортировка базы данных, обычно без учета регистра |  |
| SET NAMES utf8 from utf8mb4 tables | конвертируется с предупреждением | `dump_lost_four_byte_chars` |
| dumps without SET NAMES whose text isn't UTF-8 | читается как Latin-1 (Windows-1252) | `charset_guessed` |
| sjis, cp932, gbk, big5 dumps | читается как UTF-8, с предупреждением | `unsupported_charset` |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | вычисляются |  |
| other expressions in rows | NULL | `expression_value` |
| DEFAULT in VALUES | значение столбца по умолчанию | `default_keyword_filled` |
| DEFAULT in VALUES without a literal default | NULL | `default_keyword_null` |
| REPLACE and INSERT IGNORE | обычные строки | `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 со следующим значением |  |
| VECTOR(n) (MariaDB 11.7+) | nvarchar(max) с числами float в виде массива JSON | `type_replaced` |

## Загрузите скрипт в SQL Server

Скрипт создает таблицы, копирует строки, затем добавляет ключи, индексы и внешние ключи, поэтому загрузка идет быстро и останавливается на первой ошибке.

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

Внешние ключи добавляются WITH NOCHECK, а затем проверяются. Если строка ссылается на несуществующую строку, скрипт сообщает, какое это ограничение, и оставляет его непроверенным, а не прерывается на полпути.

Для большого дампа запускайте sqlcmd на той же машине, где работает сервер. Каждый пакет до 1000 строк фиксируется отдельно, поэтому журнал транзакций остается небольшим.

## Как создать дамп MariaDB для лучшего результата

Конвертер читает то, что есть в дампе. Эти параметры сохраняют в нем больше ваших данных:

- --default-character-set=utf8mb4 сохраняет эмодзи и другие 4-байтовые символы, которые дамп в utf8mb3 теряет еще до конвертера.
- --hex-blob записывает двоичные столбцы и значения VECTOR в шестнадцатеричном виде, который не портится при копировании между системами.
- --routines --triggers --events добавляют эти объекты в дамп, чтобы отчет мог их перечислить.

## Что не конвертируется

Представления, триггеры, хранимые процедуры, функции и события написаны на собственном языке MariaDB. Они перечислены в отчете по имени и никогда не удаляются молча, чтобы вы могли переписать их для SQL Server.

## Вопросы о MariaDB в SQL Server

### Мой дамп загружается на сервер?

Нет. Конвертер работает в вашем браузере и читает дамп с диска по частям, поэтому он никогда не покидает ваш компьютер. Приложение для компьютера и командная строка тоже конвертируют на вашем компьютере.

### Насколько большим может быть дамп?

Конвертер никогда не держит весь дамп в памяти: он читает файл дважды, по диапазонам, и пишет скрипт по ходу чтения. Дампы в несколько гигабайт конвертируются в браузере, в приложении для компьютера и в командной строке.

### Из каких версий MariaDB может быть дамп?

Дампы из mariadb-dump и mysqldump на MariaDB с 10.3 по 12, с одним INSERT на таблицу или одним на строку. Каждый тестовый дамп создан в MariaDB 10.11, 11.4 и 11.8 и сверен с источником ячейка за ячейкой.

### Сохраняются ли столбцы UUID, INET6, JSON и VECTOR?

UUID становится uniqueidentifier, столбцы INET - nvarchar, JSON - nvarchar(max), а VECTOR - массивом JSON из его чисел float. Нулевые даты становятся NULL, и отчет их подсчитывает.

### Сохраняются ли значения AUTO_INCREMENT и последовательности?

Да. Каждый столбец AUTO_INCREMENT становится столбцом IDENTITY, который продолжается после наибольшего id. Последовательности становятся последовательностями SQL Server, а значения по умолчанию, которые берутся из них, продолжают из них браться.

### А хранимые процедуры и триггеры?

Они перечислены в отчете по имени и не конвертируются, потому что каждая база данных пишет их на своем языке.

### На каких версиях SQL Server загружается скрипт?

SQL Server с 2017 по 2025. Один и тот же скрипт загружается на каждой из них и останавливается на первой ошибке, если что-то пойдет не так.

## Из MariaDB

- [MariaDB в PostgreSQL](https://intosql.com/ru/mariadb-v-postgresql)
- [MariaDB в MySQL](https://intosql.com/ru/mariadb-v-mysql)
- [MariaDB в MariaDB](https://intosql.com/ru/mariadb-v-mariadb)
- [MariaDB в SQLite](https://intosql.com/ru/mariadb-v-sqlite)
- [MariaDB в Oracle](https://intosql.com/ru/mariadb-v-oracle)

## В SQL Server

- [MySQL в SQL Server](https://intosql.com/ru/mysql-v-sql-server)
- [PostgreSQL в SQL Server](https://intosql.com/ru/postgresql-v-sql-server)
- [SQL Server в SQL Server](https://intosql.com/ru/sql-server-v-sql-server)
- [SQLite в SQL Server](https://intosql.com/ru/sqlite-v-sql-server)
- [Oracle в SQL Server](https://intosql.com/ru/oracle-v-sql-server)

## Руководство и все пары

- [SQL Server в MariaDB](https://intosql.com/ru/sql-server-v-mariadb)
- [Руководство по миграции MariaDB в SQL Server](https://intosql.com/docs/migrations/mariadb-to-sql-server)
- [Типы данных из MariaDB в SQL Server](https://intosql.com/docs/types/mariadb-to-sql-server)
- [Все пары баз данных](https://intosql.com/ru/migratsiya-bazy-dannykh)
