Pular para o conteúdo
Início do IntoSQL

Converta SQL Server para MariaDB

Solte o script que o Generate Scripts do SSMS escreve com schema e dados, em .sql ou .sql.gz, UTF-16 ou UTF-8, e baixe um script do MariaDB com as mesmas tabelas, chaves, índices e dados. Cada valor que o MariaDB não aceita como está, e cada objeto que ele não traz, aparece no relatório.

Seu arquivo
sqlshop_2024_sqlserver.sqlArquivo de exemplo, 11 kB
Seu banco de dados

18 linhas convertidas, 3 correções, nenhuma rejeitada

Mostrar

Tabelas em shop_2024_sqlserver.sqlDump do SQL Server · gerado por SQL Server Management Objects · utf-8

  • orders10 linhas1
    11 colunas
    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 linhas2
    8 colunas
    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

Não convertidos

  • Visão paid_orders
  • Gatilho orders_no_negative

Cada banco de dados escreve estes objetos na sua própria linguagem. Reescreva-os para o 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;

Correções

  1. "shipped_at" de orders é datetime2(7), com mais dígitos de segundo do que o MariaDB guarda, então vira datetime(6) e os últimos dígitos são cortados.
  2. "created_at" de customers contém instantes com fuso horário; o MariaDB não tem um tipo que o mantenha, então eles são guardados em UTC como datetime.
  3. "row_version" de customers é uma versão de linha que o SQL Server define sozinho; o dump não tem valores para ela, então vira blob e fica vazia.

Para revisar

  • 6 colunas de texto comparam sem diferenciar maiúsculas na origem; o MariaDB compara de forma exata, então chaves únicas e buscas podem se comportar de outro jeito. Use uma collation ou um tipo de coluna sem diferenciação de maiúsculas nas colunas que precisarem.
  • 2 visões, gatilhos, rotinas ou eventos não foram convertidos; o relatório lista cada um. Recrie-os manualmente no MariaDB.
  • O CHECK check1 de orders não pode ser escrito para o MariaDB (function isjson), então não é criado. Escreva o CHECK manualmente se ele for importante.
  • O índice idx_orders_pending de orders usa uma expressão que não pode ser escrita para o MariaDB (neither MySQL 5.7 nor MariaDB index an expression), então não é criado. Crie o índice manualmente se as consultas precisarem dele.

Seu arquivo é convertido neste computador e nunca é enviado.

Outros exemplos:

O que muda do SQL Server para o MariaDB

Cada linha é uma regra que o conversor aplica, com a linha do relatório que ele escreve quando a regra muda algo nos seus dados.

  • bit

    tinyint(1)

    O BOOLEAN do MariaDB é TINYINT(1): 1 e 0, como bit os guarda.

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

    char(n), varchar(n) até 1024 caracteres, tipos text acima disso

    O texto mantém cada caractere como utf8mb4. Uma coluna em uma chave é no máximo varchar(768), o maior que uma chave comporta.

  • decimal(p,s), money, smallmoney

    decimal(p,s); money como decimal(19,4)

    decimal comporta 65 dígitos, mais que os 38 do SQL Server, então todo valor é exato.

  • datetime, datetime2, smalldatetime

    datetime(p)

    Um datetime é a leitura de um relógio de parede nos dois.

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

    seis dígitos de segundo, o sétimo cortado

    O MariaDB guarda microssegundos; o sétimo dígito (100 nanossegundos) é cortado, nunca arredondado, então nenhum valor passa para o segundo ou o dia seguinte.

    Linha do relatório: fraction_cut

  • datetimeoffset

    datetime(p) em UTC

    O TIMESTAMP do MariaDB só vai até 2038, então os instantes são guardados como datetime em UTC, o mesmo instante qualquer que seja o fuso que cada valor tinha.

    Linha do relatório: moments_as_utc

  • time

    time(p)

    Os mesmos horários do dia.

  • dates before the year 1000

    NULL

    O MariaDB guarda os anos de 1000 a 9999, e o SQL Server vai até o ano 1. Esses valores viram NULL e o relatório os conta.

    Linha do relatório: date_out_of_range

  • json (SQL Server 2025)

    json, um longtext com um CHECK de JSON

    Os mesmos valores JSON, que as funções JSON do MariaDB leem.

  • uniqueidentifier

    uuid

    Os mesmos identificadores, escritos em minúsculas.

  • binary, varbinary, image

    binary(n), varbinary(n) e tipos blob

    Bytes continuam sendo bytes.

  • geometry, geography

    blob com os bytes próprios do SQL Server

    O SSMS escreve valores espaciais na serialização do SQL Server, que é mantida byte a byte.

    Linha do relatório: spatial_as_native

  • rowversion, timestamp

    blob, sem valores

    O SQL Server define a versão de linha sozinho, e o SSMS não escreve valores para ela no script.

    Linha do relatório: rowversion_empty

  • xml, sql_variant, hierarchyid, vector

    longtext

    O MariaDB não tem um tipo equivalente; xml e sql_variant mantêm o texto de cada valor e hierarchyid o seu caminho, como /1/2/.

    Linha do relatório: type_replaced

  • collations that ignore case (_CI_)

    comparação exata (utf8mb4_bin)

    As tabelas usam utf8mb4_bin para que as chaves únicas separem o que o SQL Server separava; colunas que ignoravam maiúsculas perdem isso. As regras de acentos mudam entre versões, então nenhuma collation _ci corresponde à do SQL Server em todas.

    Linha do relatório: case_insensitive_collation

  • IDENTITY

    AUTO_INCREMENT, continuando depois do maior id

    A coluna que inicia a chave primária conta; o contador continua depois do maior id.

  • IDENTITY columns that don't lead the primary key

    um inteiro simples

    O MariaDB conta uma coluna por tabela, no início de uma chave; qualquer outra mantém seus valores sem contador.

    Linha do relatório: counter_dropped

  • CREATE SEQUENCE

    CREATE SEQUENCE com as mesmas opções

    As sequências do MariaDB funcionam do mesmo jeito. O SSMS não escreve até onde uma sequência chegou, então ela começa onde foi criada.

  • computed columns

    colunas geradas, STORED quando PERSISTED, VIRTUAL nos outros casos

    O MariaDB as calcula dos mesmos dois jeitos, com CONCAT escrito para que NULL conte como vazio, como no SQL Server.

  • computed columns with functions MariaDB lacks

    uma coluna simples

    Uma fórmula que não pode ser escrita deixa uma coluna simples e uma linha no relatório; o SSMS não escreve valores para colunas computadas.

    Linha do relatório: generated_not_translated

  • defaults with functions MariaDB lacks, and NEXT VALUE FOR

    sem valor padrão

    Um valor padrão que não pode ser escrito fica de fora e é informado.

    Linha do relatório: default_not_translated

  • CHECK constraints

    traduzidos

    Os mesmos CHECKs, testados à medida que cada linha carrega.

  • CHECK constraints with functions MariaDB lacks

    não criado

    Um CHECK que não pode ser escrito fica de fora e é informado.

    Linha do relatório: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    não criado

    O SQL Server não aplica esses CHECKs, então as linhas podem violá-los.

    Linha do relatório: check_not_enforced

  • filtered and columnstore indexes

    não criado

    O IntoSQL escreve índices b-tree sobre colunas inteiras; crie os outros de novo depois da carga.

    Linha do relatório: index_skipped

  • foreign keys

    chaves estrangeiras, carregadas com FOREIGN_KEY_CHECKS=0

    As linhas carregam em qualquer ordem, e as chaves verificam as linhas novas depois.

  • foreign keys to tables the dump doesn't create

    não criado

    Uma chave não pode apontar para uma tabela que não existe.

    Linha do relatório: foreign_key_skipped

  • tables on a partition scheme

    uma tabela com as linhas de todas as partições

    As linhas são as mesmas; particione a tabela de novo no MariaDB se precisar.

    Linha do relatório: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    WITH SYSTEM VERSIONING, a partir das linhas atuais; a tabela de histórico como tabela simples

    O MariaDB mantém o histórico sozinho daqui em diante; as colunas de período e a tabela de histórico do SQL Server são copiadas como estavam.

  • schemas

    um banco de dados, tabelas com o nome do schema na frente

    Os schemas do MariaDB são bancos de dados, que um script carregado em um único banco não pode criar; as tabelas de dbo mantêm seus nomes.

    Linha do relatório: schemas_merged

  • NOT NULL columns with values that become NULL

    NOT NULL removido

    Uma coluna cujos valores tiveram de virar NULL não pode manter NOT NULL, senão a carga pararia.

    Linha do relatório: not_null_relaxed

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

    listados no relatório

    O código deles é escrito em T-SQL, então eles são listados para você recriá-los.

    Linha do relatório: not_converted_objects

  • scripts without CREATE TABLE (data only)

    tipos deduzidos dos valores

    Um script só de dados tem apenas linhas, então os tipos vêm dos valores.

    Linha do relatório: no_schema

  • expressions in INSERT values

    NULL

    Um conversor que não executa um banco de dados não consegue avaliá-las.

    Linha do relatório: expression_value

  • types IntoSQL doesn't know

    longtext

    O tipo text aceita qualquer valor; mude o tipo depois da carga.

    Linha do relatório: unknown_type

  • NUL characters in text

    mantido

    O valor é copiado com o caractere NUL escapado.

  • text that isn't valid in its encoding

    os bytes inválidos como o caractere de substituição

    O script é UTF-8 e todo valor precisa ser texto válido.

    Linha do relatório: invalid_utf8_replaced

  • text decoded twice (ñ)

    copiado como está

    O script contém exatamente esses caracteres, então eles são copiados; o relatório os aponta.

    Linha do relatório: mojibake_suspected

No SQL ServerNo MariaDBLinha do relatório
bittinyint(1)O BOOLEAN do MariaDB é TINYINT(1): 1 e 0, como bit os guarda.
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), textchar(n), varchar(n) até 1024 caracteres, tipos text acima dissoO texto mantém cada caractere como utf8mb4. Uma coluna em uma chave é no máximo varchar(768), o maior que uma chave comporta.
decimal(p,s), money, smallmoneydecimal(p,s); money como decimal(19,4)decimal comporta 65 dígitos, mais que os 38 do SQL Server, então todo valor é exato.
datetime, datetime2, smalldatetimedatetime(p)Um datetime é a leitura de um relógio de parede nos dois.
datetime2(7), time(7) and datetimeoffset(7)seis dígitos de segundo, o sétimo cortadoO MariaDB guarda microssegundos; o sétimo dígito (100 nanossegundos) é cortado, nunca arredondado, então nenhum valor passa para o segundo ou o dia seguinte.fraction_cut
datetimeoffsetdatetime(p) em UTCO TIMESTAMP do MariaDB só vai até 2038, então os instantes são guardados como datetime em UTC, o mesmo instante qualquer que seja o fuso que cada valor tinha.moments_as_utc
timetime(p)Os mesmos horários do dia.
dates before the year 1000NULLO MariaDB guarda os anos de 1000 a 9999, e o SQL Server vai até o ano 1. Esses valores viram NULL e o relatório os conta.date_out_of_range
json (SQL Server 2025)json, um longtext com um CHECK de JSONOs mesmos valores JSON, que as funções JSON do MariaDB leem.
uniqueidentifieruuidOs mesmos identificadores, escritos em minúsculas.
binary, varbinary, imagebinary(n), varbinary(n) e tipos blobBytes continuam sendo bytes.
geometry, geographyblob com os bytes próprios do SQL ServerO SSMS escreve valores espaciais na serialização do SQL Server, que é mantida byte a byte.spatial_as_native
rowversion, timestampblob, sem valoresO SQL Server define a versão de linha sozinho, e o SSMS não escreve valores para ela no script.rowversion_empty
xml, sql_variant, hierarchyid, vectorlongtextO MariaDB não tem um tipo equivalente; xml e sql_variant mantêm o texto de cada valor e hierarchyid o seu caminho, como /1/2/.type_replaced
collations that ignore case (_CI_)comparação exata (utf8mb4_bin)As tabelas usam utf8mb4_bin para que as chaves únicas separem o que o SQL Server separava; colunas que ignoravam maiúsculas perdem isso. As regras de acentos mudam entre versões, então nenhuma collation _ci corresponde à do SQL Server em todas.case_insensitive_collation
IDENTITYAUTO_INCREMENT, continuando depois do maior idA coluna que inicia a chave primária conta; o contador continua depois do maior id.
IDENTITY columns that don't lead the primary keyum inteiro simplesO MariaDB conta uma coluna por tabela, no início de uma chave; qualquer outra mantém seus valores sem contador.counter_dropped
CREATE SEQUENCECREATE SEQUENCE com as mesmas opçõesAs sequências do MariaDB funcionam do mesmo jeito. O SSMS não escreve até onde uma sequência chegou, então ela começa onde foi criada.
computed columnscolunas geradas, STORED quando PERSISTED, VIRTUAL nos outros casosO MariaDB as calcula dos mesmos dois jeitos, com CONCAT escrito para que NULL conte como vazio, como no SQL Server.
computed columns with functions MariaDB lacksuma coluna simplesUma fórmula que não pode ser escrita deixa uma coluna simples e uma linha no relatório; o SSMS não escreve valores para colunas computadas.generated_not_translated
defaults with functions MariaDB lacks, and NEXT VALUE FORsem valor padrãoUm valor padrão que não pode ser escrito fica de fora e é informado.default_not_translated
CHECK constraintstraduzidosOs mesmos CHECKs, testados à medida que cada linha carrega.
CHECK constraints with functions MariaDB lacksnão criadoUm CHECK que não pode ser escrito fica de fora e é informado.check_skipped
CHECK constraints added WITH NOCHECK or disablednão criadoO SQL Server não aplica esses CHECKs, então as linhas podem violá-los.check_not_enforced
filtered and columnstore indexesnão criadoO IntoSQL escreve índices b-tree sobre colunas inteiras; crie os outros de novo depois da carga.index_skipped
foreign keyschaves estrangeiras, carregadas com FOREIGN_KEY_CHECKS=0As linhas carregam em qualquer ordem, e as chaves verificam as linhas novas depois.
foreign keys to tables the dump doesn't createnão criadoUma chave não pode apontar para uma tabela que não existe.foreign_key_skipped
tables on a partition schemeuma tabela com as linhas de todas as partiçõesAs linhas são as mesmas; particione a tabela de novo no MariaDB se precisar.partitions_dropped
temporal tables (SYSTEM_VERSIONING)WITH SYSTEM VERSIONING, a partir das linhas atuais; a tabela de histórico como tabela simplesO MariaDB mantém o histórico sozinho daqui em diante; as colunas de período e a tabela de histórico do SQL Server são copiadas como estavam.
schemasum banco de dados, tabelas com o nome do schema na frenteOs schemas do MariaDB são bancos de dados, que um script carregado em um único banco não pode criar; as tabelas de dbo mantêm seus nomes.schemas_merged
NOT NULL columns with values that become NULLNOT NULL removidoUma coluna cujos valores tiveram de virar NULL não pode manter NOT NULL, senão a carga pararia.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionslistados no relatórioO código deles é escrito em T-SQL, então eles são listados para você recriá-los.not_converted_objects
scripts without CREATE TABLE (data only)tipos deduzidos dos valoresUm script só de dados tem apenas linhas, então os tipos vêm dos valores.no_schema
expressions in INSERT valuesNULLUm conversor que não executa um banco de dados não consegue avaliá-las.expression_value
types IntoSQL doesn't knowlongtextO tipo text aceita qualquer valor; mude o tipo depois da carga.unknown_type
NUL characters in textmantidoO valor é copiado com o caractere NUL escapado.
text that isn't valid in its encodingos bytes inválidos como o caractere de substituiçãoO script é UTF-8 e todo valor precisa ser texto válido.invalid_utf8_replaced
text decoded twice (ñ)copiado como estáO script contém exatamente esses caracteres, então eles são copiados; o relatório os aponta.mojibake_suspected

Carregue o script no MariaDB

O script cria as tabelas, copia as linhas e depois adiciona chaves, índices e chaves estrangeiras, então carrega rápido e para no primeiro erro.

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

As chaves estrangeiras são criadas como o dump as declara, com FOREIGN_KEY_CHECKS=0 enquanto as linhas carregam, como faz o mysqldump.

Para um dump grande, execute o cliente na mesma máquina do servidor e aumente max_allowed_packet se uma única linha for muito grande.

O IntoSQL Pro carrega o arquivo direto no MariaDB pelo app para desktop ou pela linha de comando, sem escrever um script.

Gere o dump do SQL Server para o melhor resultado

O conversor lê o que o dump contém. Estas opções mantêm mais dos seus dados nele:

  • No SSMS, clique com o botão direito no banco de dados, Tasks, Generate Scripts, e escolha as tabelas. dbatools, mssql-scripter e outras ferramentas feitas sobre a mesma biblioteca escrevem o mesmo script.
  • Em Advanced, defina Types of data to script como Schema and data. Um script só do schema tem tabelas sem linhas.
  • Salve como Unicode, o padrão do SSMS, ou como UTF-8: os dois são lidos do mesmo jeito, e gzip também funciona.

O que não é convertido

Visões, funções, procedimentos, gatilhos, sinônimos, regras e políticas de segurança são escritos em T-SQL. Eles aparecem no relatório pelo nome, nunca são descartados em silêncio, para que você possa reescrevê-los para o MariaDB.

Perguntas sobre SQL Server para MariaDB

Não encontrou a resposta? Escreva para nós pela página de contato e uma pessoa responde. Página de contato

Meu dump é enviado?

Não. O conversor roda no seu navegador e lê o dump do seu disco em partes, então ele nunca sai do seu computador. O app para desktop e a linha de comando também convertem no seu computador.

Qual o tamanho máximo do dump?

O conversor nunca guarda o dump inteiro na memória: ele lê o arquivo duas vezes, por intervalos, e escreve o script à medida que avança. Dumps de vários gigabytes são convertidos no navegador, no app para desktop e com a linha de comando.

Ele lê o arquivo UTF-16 que o SSMS salva?

Sim. O SSMS salva scripts em UTF-16 por padrão, e o conversor lê UTF-16 e UTF-8 do mesmo jeito, com ou sem gzip, com GO entre os lotes.

De quais versões do SQL Server o script pode vir?

Scripts que o SSMS, o dbatools ou o mssql-scripter escrevem a partir do SQL Server 2017. Cada script de teste vem do SQL Server 2017, 2022 e 2025 e é comparado com a origem célula por célula.

Os valores IDENTITY são mantidos?

Sim, para uma coluna por tabela: a coluna IDENTITY que inicia a chave primária vira AUTO_INCREMENT e continua depois do maior id. Sequências viram sequências do MariaDB com as mesmas opções.

O que acontece com money, datetimeoffset e outros tipos do SQL Server?

bit vira tinyint(1), money decimal(19,4), uniqueidentifier UUID, e datetimeoffset datetime em UTC. Tabelas temporais mantêm o versionamento de sistema. Colunas que ignoravam maiúsculas comparam de forma exata, e o relatório diz quais.

E os procedimentos, gatilhos e visões?

Eles aparecem no relatório pelo nome e não são convertidos, porque cada banco de dados os escreve na sua própria linguagem.

Em quais versões do MariaDB o script carrega?

MariaDB 10.11 e posteriores. Cada script de teste carrega no 10.11 e no 11.4 e para no primeiro erro se algo der errado.