Перейти к содержимому
Главная страница IntoSQL

Конвертация SQL Server в MariaDB

Перетащите скрипт, который Generate Scripts в SSMS записывает со схемой и данными, в формате .sql или .sql.gz, в UTF-16 или UTF-8, и скачайте скрипт MariaDB с теми же таблицами, ключами, индексами и данными. Каждое значение, которое MariaDB не может хранить как есть, и каждый объект, который он не переносит, указаны в отчете.

Ваш файл
sqlshop_2024_sqlserver.sqlПример файла, 11 кБ
Ваша база данных

18 строк конвертировано, 3 исправления, ни одна не отклонена

Показать

Таблицы в shop_2024_sqlserver.sqlДамп SQL Server · создан программой SQL Server Management Objects · utf-8

  • orders10 строк1
    11 столбцов
    idint not null
    customer_idint not null
    statusvarchar(10) not null
    totaldecimal(19,4) not null
    itemstinyint unsigned not null
    ordered_atdatetime not null
    shipped_atdatetime(6)
    notetext
    detailstext
    order_refuuid not null
    total_with_taxdecimal(12,2)
  • customers8 строк2
    8 столбцов
    idint not null
    namevarchar(100) not null
    emailvarchar(200) not null
    countrychar(2) not null
    is_activetinyint(1) not null
    signed_update
    created_atdatetime not null
    row_versionblob

Не конвертировано

  • Представление paid_orders
  • Триггер orders_no_negative

Каждая база данных пишет их на своем языке. Перепишите их для MariaDB.

-- Written by IntoSQL from a SQL Server dump. Load it with: mariadb --default-character-set=utf8mb4 <database> < <file>
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO,ALLOW_INVALID_DATES';

CREATE TABLE `orders` (
  `id` int NOT NULL AUTO_INCREMENT,
  `customer_id` int NOT NULL,
  `status` varchar(10) NOT NULL DEFAULT 'pending',
  `total` decimal(19,4) NOT NULL,
  `items` tinyint unsigned NOT NULL DEFAULT 1,
  `ordered_at` datetime NOT NULL,
  `shipped_at` datetime(6),
  `note` text,
  `details` text,
  `order_ref` uuid NOT NULL DEFAULT (uuid()),
  `total_with_tax` decimal(12,2) GENERATED ALWAYS AS (cast(`total` * (1.16) AS DECIMAL(12,2))) STORED,
  PRIMARY KEY (`id`),
  KEY `idx_orders_customer` (`customer_id`),
  KEY `idx_orders_status_date` (`status`,`ordered_at`),
  CONSTRAINT `check2` CHECK (`status` = 'cancelled' OR `status` = 'shipped' OR `status` = 'paid' OR `status` = 'pending'),
  CONSTRAINT `check3` CHECK (`total` >= (0)),
  FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`)
) AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

CREATE TABLE `customers` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `email` varchar(200) NOT NULL,
  `country` char(2) NOT NULL DEFAULT 'US',
  `is_active` tinyint(1) NOT NULL DEFAULT 1,
  `signed_up` date,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `row_version` blob,
  PRIMARY KEY (`id`),
  UNIQUE KEY (`email`)
) AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='People who bought at least once';

INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (1,'Ana Martínez','ana@example.com','MX',1,'2023-01-15','2023-01-15 10:24:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (2,'Zoë Müller','zoe@example.de','DE',1,'2023-02-03','2023-02-03 08:11:42.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (3,'José Peña','jose@example.es','ES',0,'2023-03-21','2023-03-21 19:05:17.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (4,'李雷','lilei@example.cn','CN',1,'2023-05-09','2023-05-09 02:40:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (5,'Noah O\'Brien','noah@example.ie','IE',1,NULL,'2023-06-30 14:00:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (6,'Amélie Laurent','amelie@example.fr','FR',1,'2024-01-02','2024-01-02 09:30:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (7,'Ravi Patel','ravi@example.in','IN',0,'2024-02-29','2024-02-29 23:59:59.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'2024-04-12','2024-04-12 12:12:12.000000');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (1,1,'shipped',129.9000,3,'2024-03-01T10:00:00.000000','2024-03-02T16:30:00.123456',NULL,'{"gift": false}','0b7a4c2e-3f1d-4e8a-9c55-1a2b3c4d5e6f');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (2,2,'paid',54.0000,1,'2024-03-02T11:15:00.000000',NULL,'Gift wrap 🎁','{"gift": true, "wrap": "red"}','1c8b5d3f-4a2e-4f9b-8d66-2b3c4d5e6f70');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (3,1,'cancelled',12.5000,1,'2024-03-03T09:45:00.000000',NULL,'Customer changed their mind',NULL,'2d9c6e4a-5b3f-4a0c-9e77-3c4d5e6f7081');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (4,4,'shipped',980.0000,12,'2024-03-05T02:10:00.000000','2024-03-07T08:00:00.000000','请小心轻放','{"fragile": true}','3e0d7f5b-6c4a-4b1d-8f88-4d5e6f708192');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (5,5,'pending',45.7500,2,'2024-03-08T17:20:00.000000',NULL,'Leave at the door; ring twice',NULL,'4f1e806c-7d5b-4c2e-9a99-5e6f708192a3');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (6,6,'shipped',310.4000,5,'2024-03-10T13:00:00.000000','2024-03-11T09:00:00.000000','Fragile: "glass"','{"fragile": true}','50f2917d-8e6c-4d3f-8baa-6f708192a3b4');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (7,8,'paid',76.2000,2,'2024-03-11T18:45:00.000000',NULL,NULL,NULL,'6103a28e-9f7d-4e40-9cbb-708192a3b4c5');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (8,2,'shipped',19.9900,1,'2024-03-12T08:00:00.000000','9999-12-31T23:59:59.999999','Shipped date set to the maximum by an old import',NULL,'7214b39f-a08e-4f51-8dcc-8192a3b4c5d6');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (9,3,'shipped',64.0000,2,'2024-03-14T15:30:00.000000','2024-03-15T10:00:00.000000','Two parcels','{"parcels": [1, 2]}','8325c4a0-b19f-4062-9edd-92a3b4c5d6e7');
INSERT INTO `orders` (`id`,`customer_id`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`,`details`,`order_ref`) VALUES (10,7,'paid',1499.0000,1,'2024-03-15T21:05:00.000000',NULL,'C:\\Users\\ravi\\invoice.pdf',NULL,'9436d5b1-c2a0-4173-8fee-a3b4c5d6e7f8');

SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;

Исправления

  1. "shipped_at" таблицы orders имеет тип datetime2(7), в нем больше цифр долей секунды, чем хранит MariaDB, поэтому это datetime(6), а последние цифры отбрасываются.
  2. "created_at" таблицы customers содержит моменты времени с часовым поясом; в MariaDB нет типа, который его сохраняет, поэтому они хранятся в UTC как datetime.
  3. "row_version" таблицы customers - это версия строки, которую SQL Server задает сам; в дампе нет ее значений, поэтому это blob, и столбец пуст.

Требует проверки

  • 6 текстовых столбцов сравнивают значения без учета регистра в источнике; MariaDB сравнивает точно, поэтому уникальные ключи и поиск могут работать иначе. Используйте сопоставление или тип столбца без учета регистра для столбцов, которым это нужно.
  • Не конвертированы представления, триггеры, процедуры и события (2 объекта); отчет перечисляет каждый. Создайте их заново вручную в MariaDB.
  • Проверку check1 таблицы orders нельзя записать для MariaDB (function isjson), поэтому она не создана. Запишите проверку вручную, если она важна.
  • Индекс idx_orders_pending таблицы orders использует выражение, которое нельзя записать для MariaDB (neither MySQL 5.7 nor MariaDB index an expression), поэтому он не создан. Создайте индекс вручную, если он нужен запросам.

Файл конвертируется на этом компьютере и никуда не загружается.

Другие примеры:

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

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

  • bit

    tinyint(1)

    BOOLEAN в MariaDB - это TINYINT(1): 1 и 0, как их хранит bit.

  • char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text

    char(n), varchar(n) до 1024 символов, дальше типы text

    Текст хранит каждый символ в utf8mb4. Столбец в ключе - не больше varchar(768), это максимум, который вмещает ключ.

  • decimal(p,s), money, smallmoney

    decimal(p,s); money как decimal(19,4)

    decimal вмещает 65 цифр, больше, чем 38 в SQL Server, поэтому каждое значение точное.

  • datetime, datetime2, smalldatetime

    datetime(p)

    datetime в обеих базах - это показание часов.

  • datetime2(7), time(7) and datetimeoffset(7)

    шесть цифр долей секунды, седьмая отбрасывается

    MariaDB хранит микросекунды; седьмая цифра (100 наносекунд) отбрасывается, а не округляется, поэтому ни одно значение не переходит на следующую секунду или день.

    Строка отчета: fraction_cut

  • datetimeoffset

    datetime(p) в UTC

    TIMESTAMP в MariaDB доходит только до 2038 года, поэтому моменты хранятся как datetime в UTC: тот же момент, какое бы смещение ни было у значения.

    Строка отчета: moments_as_utc

  • time

    time(p)

    То же время суток.

  • dates before the year 1000

    NULL

    MariaDB хранит годы с 1000 по 9999, а SQL Server - начиная с 1 года. Такие значения становятся NULL, и отчет их подсчитывает.

    Строка отчета: date_out_of_range

  • json (SQL Server 2025)

    json, longtext с проверкой JSON

    Те же значения JSON, которые читают функции JSON в MariaDB.

  • uniqueidentifier

    uuid

    Те же идентификаторы, записанные строчными буквами.

  • binary, varbinary, image

    binary(n), varbinary(n) и типы blob

    Байты остаются байтами.

  • geometry, geography

    blob с собственными байтами SQL Server

    SSMS записывает пространственные значения в сериализации SQL Server, которая сохраняется байт в байт.

    Строка отчета: spatial_as_native

  • rowversion, timestamp

    blob, пустой

    SQL Server сам задает версию строки, и SSMS не записывает для нее значений.

    Строка отчета: rowversion_empty

  • xml, sql_variant, hierarchyid, vector

    longtext

    В MariaDB нет равнозначного типа; xml и sql_variant сохраняют текст каждого значения, а hierarchyid - свой путь, например /1/2/.

    Строка отчета: type_replaced

  • collations that ignore case (_CI_)

    точное сравнение (utf8mb4_bin)

    Таблицы используют utf8mb4_bin, поэтому уникальные ключи различают то, что различал SQL Server; столбцы, которые не учитывали регистр, это теряют. Правила для диакритики отличаются в разных версиях, поэтому ни одна сортировка _ci не совпадает с SQL Server во всех из них.

    Строка отчета: case_insensitive_collation

  • IDENTITY

    AUTO_INCREMENT, продолжается после наибольшего id

    Нумеруется первый столбец первичного ключа; счетчик продолжается после наибольшего id.

  • IDENTITY columns that don't lead the primary key

    обычное целое

    MariaDB нумерует один столбец на таблицу, в начале ключа; любой другой сохраняет значения без счетчика.

    Строка отчета: counter_dropped

  • CREATE SEQUENCE

    CREATE SEQUENCE с теми же параметрами

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

  • computed columns

    генерируемые столбцы, STORED при PERSISTED, иначе VIRTUAL

    MariaDB вычисляет их теми же двумя способами, а CONCAT записан так, чтобы NULL считался пустой строкой, как в SQL Server.

  • computed columns with functions MariaDB lacks

    обычный столбец

    Формула, которую нельзя записать, оставляет обычный столбец и строку в отчете; SSMS не записывает значения вычисляемых столбцов.

    Строка отчета: generated_not_translated

  • defaults with functions MariaDB lacks, and NEXT VALUE FOR

    без значения по умолчанию

    Значение по умолчанию, которое нельзя записать, опускается и попадает в отчет.

    Строка отчета: default_not_translated

  • CHECK constraints

    переводится

    Те же проверки, применяемые при загрузке каждой строки.

  • CHECK constraints with functions MariaDB lacks

    не создается

    Проверка, которую нельзя записать, опускается и попадает в отчет.

    Строка отчета: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    не создается

    SQL Server не применяет эти проверки, поэтому строки могут их нарушать.

    Строка отчета: check_not_enforced

  • filtered and columnstore indexes

    не создается

    IntoSQL создает индексы b-tree по целым столбцам; остальные создайте заново после загрузки.

    Строка отчета: index_skipped

  • foreign keys

    внешние ключи, загрузка с FOREIGN_KEY_CHECKS=0

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

  • foreign keys to tables the dump doesn't create

    не создается

    Ключ не может ссылаться на таблицу, которой нет.

    Строка отчета: foreign_key_skipped

  • tables on a partition scheme

    одна таблица со строками всех секций

    Строки те же; при необходимости секционируйте таблицу заново в MariaDB.

    Строка отчета: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    WITH SYSTEM VERSIONING, начиная с текущих строк; таблица истории как обычная таблица

    Теперь MariaDB сама ведет историю; столбцы периода и таблица истории из SQL Server копируются как были.

  • schemas

    одна база данных, имя таблицы начинается с имени ее схемы

    Схемы в MariaDB - это базы данных, а скрипт, загружаемый в одну базу, не может их создать; таблицы из dbo сохраняют свои имена.

    Строка отчета: schemas_merged

  • NOT NULL columns with values that become NULL

    NOT NULL снимается

    Столбец, значения которого пришлось заменить на NULL, не может сохранить NOT NULL, иначе загрузка остановится.

    Строка отчета: not_null_relaxed

  • views, functions, procedures, triggers, synonyms, types and partition functions

    перечисляются в отчете

    Их код написан на T-SQL, поэтому они перечислены, чтобы вы создали их заново.

    Строка отчета: not_converted_objects

  • scripts without CREATE TABLE (data only)

    типы определяются по значениям

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

    Строка отчета: no_schema

  • expressions in INSERT values

    NULL

    Конвертер, который не запускает базу данных, не может их вычислить.

    Строка отчета: expression_value

  • types IntoSQL doesn't know

    longtext

    Тип text вмещает любое значение; измените тип после загрузки.

    Строка отчета: unknown_type

  • NUL characters in text

    сохраняется

    Значение копируется, а символ NUL в нем экранируется.

  • text that isn't valid in its encoding

    неверные байты заменяются символом замены

    Скрипт в UTF-8, и каждое значение должно быть корректным текстом.

    Строка отчета: invalid_utf8_replaced

  • text decoded twice (ñ)

    копируется как есть

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

    Строка отчета: mojibake_suspected

В SQL ServerВ MariaDBСтрока отчета
bittinyint(1)BOOLEAN в MariaDB - это TINYINT(1): 1 и 0, как их хранит bit.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), textchar(n), varchar(n) до 1024 символов, дальше типы textТекст хранит каждый символ в utf8mb4. Столбец в ключе - не больше varchar(768), это максимум, который вмещает ключ.
decimal(p,s), money, smallmoneydecimal(p,s); money как decimal(19,4)decimal вмещает 65 цифр, больше, чем 38 в SQL Server, поэтому каждое значение точное.
datetime, datetime2, smalldatetimedatetime(p)datetime в обеих базах - это показание часов.
datetime2(7), time(7) and datetimeoffset(7)шесть цифр долей секунды, седьмая отбрасываетсяMariaDB хранит микросекунды; седьмая цифра (100 наносекунд) отбрасывается, а не округляется, поэтому ни одно значение не переходит на следующую секунду или день.fraction_cut
datetimeoffsetdatetime(p) в UTCTIMESTAMP в MariaDB доходит только до 2038 года, поэтому моменты хранятся как datetime в UTC: тот же момент, какое бы смещение ни было у значения.moments_as_utc
timetime(p)То же время суток.
dates before the year 1000NULLMariaDB хранит годы с 1000 по 9999, а SQL Server - начиная с 1 года. Такие значения становятся NULL, и отчет их подсчитывает.date_out_of_range
json (SQL Server 2025)json, longtext с проверкой JSONТе же значения JSON, которые читают функции JSON в MariaDB.
uniqueidentifieruuidТе же идентификаторы, записанные строчными буквами.
binary, varbinary, imagebinary(n), varbinary(n) и типы blobБайты остаются байтами.
geometry, geographyblob с собственными байтами SQL ServerSSMS записывает пространственные значения в сериализации SQL Server, которая сохраняется байт в байт.spatial_as_native
rowversion, timestampblob, пустойSQL Server сам задает версию строки, и SSMS не записывает для нее значений.rowversion_empty
xml, sql_variant, hierarchyid, vectorlongtextВ MariaDB нет равнозначного типа; xml и sql_variant сохраняют текст каждого значения, а hierarchyid - свой путь, например /1/2/.type_replaced
collations that ignore case (_CI_)точное сравнение (utf8mb4_bin)Таблицы используют utf8mb4_bin, поэтому уникальные ключи различают то, что различал SQL Server; столбцы, которые не учитывали регистр, это теряют. Правила для диакритики отличаются в разных версиях, поэтому ни одна сортировка _ci не совпадает с SQL Server во всех из них.case_insensitive_collation
IDENTITYAUTO_INCREMENT, продолжается после наибольшего idНумеруется первый столбец первичного ключа; счетчик продолжается после наибольшего id.
IDENTITY columns that don't lead the primary keyобычное целоеMariaDB нумерует один столбец на таблицу, в начале ключа; любой другой сохраняет значения без счетчика.counter_dropped
CREATE SEQUENCECREATE SEQUENCE с теми же параметрамиПоследовательности в MariaDB работают так же. SSMS не записывает, до какого значения дошла последовательность, поэтому она начинается с того, с чего была создана.
computed columnsгенерируемые столбцы, STORED при PERSISTED, иначе VIRTUALMariaDB вычисляет их теми же двумя способами, а CONCAT записан так, чтобы NULL считался пустой строкой, как в SQL Server.
computed columns with functions MariaDB lacksобычный столбецФормула, которую нельзя записать, оставляет обычный столбец и строку в отчете; SSMS не записывает значения вычисляемых столбцов.generated_not_translated
defaults with functions MariaDB lacks, and NEXT VALUE FORбез значения по умолчаниюЗначение по умолчанию, которое нельзя записать, опускается и попадает в отчет.default_not_translated
CHECK constraintsпереводитсяТе же проверки, применяемые при загрузке каждой строки.
CHECK constraints with functions MariaDB lacksне создаетсяПроверка, которую нельзя записать, опускается и попадает в отчет.check_skipped
CHECK constraints added WITH NOCHECK or disabledне создаетсяSQL Server не применяет эти проверки, поэтому строки могут их нарушать.check_not_enforced
filtered and columnstore indexesне создаетсяIntoSQL создает индексы b-tree по целым столбцам; остальные создайте заново после загрузки.index_skipped
foreign keysвнешние ключи, загрузка с FOREIGN_KEY_CHECKS=0Строки загружаются в любом порядке, а ключи затем проверяют новые строки.
foreign keys to tables the dump doesn't createне создаетсяКлюч не может ссылаться на таблицу, которой нет.foreign_key_skipped
tables on a partition schemeодна таблица со строками всех секцийСтроки те же; при необходимости секционируйте таблицу заново в MariaDB.partitions_dropped
temporal tables (SYSTEM_VERSIONING)WITH SYSTEM VERSIONING, начиная с текущих строк; таблица истории как обычная таблицаТеперь MariaDB сама ведет историю; столбцы периода и таблица истории из SQL Server копируются как были.
schemasодна база данных, имя таблицы начинается с имени ее схемыСхемы в MariaDB - это базы данных, а скрипт, загружаемый в одну базу, не может их создать; таблицы из dbo сохраняют свои имена.schemas_merged
NOT NULL columns with values that become NULLNOT NULL снимаетсяСтолбец, значения которого пришлось заменить на NULL, не может сохранить NOT NULL, иначе загрузка остановится.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionsперечисляются в отчетеИх код написан на T-SQL, поэтому они перечислены, чтобы вы создали их заново.not_converted_objects
scripts without CREATE TABLE (data only)типы определяются по значениямСкрипт только с данными содержит лишь строки, поэтому типы берутся из значений.no_schema
expressions in INSERT valuesNULLКонвертер, который не запускает базу данных, не может их вычислить.expression_value
types IntoSQL doesn't knowlongtextТип text вмещает любое значение; измените тип после загрузки.unknown_type
NUL characters in textсохраняетсяЗначение копируется, а символ NUL в нем экранируется.
text that isn't valid in its encodingневерные байты заменяются символом заменыСкрипт в UTF-8, и каждое значение должно быть корректным текстом.invalid_utf8_replaced
text decoded twice (ñ)копируется как естьСкрипт содержит именно эти символы, поэтому они копируются; отчет на них указывает.mojibake_suspected

Загрузите скрипт в MariaDB

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

mariadb --default-character-set=utf8mb4 mydb < sql_server.mariadb.sql

Внешние ключи создаются так, как их объявляет дамп, с FOREIGN_KEY_CHECKS=0 на время загрузки строк, как это делает mysqldump.

Для большого дампа запускайте клиент на той же машине, где работает сервер, и увеличьте max_allowed_packet, если отдельная строка очень большая.

IntoSQL Pro загружает файл прямо в MariaDB из приложения для компьютера или командной строки, без написания скрипта.

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

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

  • В SSMS щелкните базу данных правой кнопкой, выберите Tasks, Generate Scripts и отметьте таблицы. dbatools, mssql-scripter и другие инструменты на той же библиотеке пишут такой же скрипт.
  • В разделе Advanced задайте для Types of data to script значение Schema and data. Скрипт только со схемой содержит таблицы без строк.
  • Сохраните его в Unicode, как по умолчанию в SSMS, или в UTF-8: оба читаются одинаково, gzip тоже подходит.

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

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

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

Нет ответа на ваш вопрос? Напишите нам через страницу контактов, и вам ответит человек. Страница контактов

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

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

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

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

Читает ли он файл UTF-16, который сохраняет SSMS?

Да. SSMS по умолчанию сохраняет скрипты в UTF-16, а конвертер одинаково читает UTF-16 и UTF-8, сжатые gzip или нет, с GO между пакетами.

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

Скрипты, которые SSMS, dbatools или mssql-scripter пишут из SQL Server 2017 и новее. Каждый тестовый скрипт создан в SQL Server 2017, 2022 и 2025 и сверен с источником ячейка за ячейкой.

Сохраняются ли значения IDENTITY?

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

Что происходит с money, datetimeoffset и другими типами SQL Server?

bit становится tinyint(1), money - decimal(19,4), uniqueidentifier - UUID, а datetimeoffset - datetime в UTC. Темпоральные таблицы сохраняют системное версионирование. Столбцы, которые не учитывали регистр, сравниваются точно, и отчет указывает, какие именно.

А процедуры, триггеры и представления?

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

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

MariaDB 10.11 и новее. Каждый тестовый скрипт загружается на 10.11 и 11.4 и останавливается на первой ошибке, если что-то пойдет не так.