Converta SQL Server para MySQL
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 MySQL com as mesmas tabelas, chaves, índices e dados. Cada valor que o MySQL não aceita como está, e cada objeto que ele não traz, aparece no relatório.
18 linhas convertidas, 3 correções, nenhuma rejeitada
Tabelas em shop_2024_sqlserver.sqlDump do SQL Server · gerado por SQL Server Management Objects · utf-8
orders10 linhas1
11 colunas id int not null customer_id int not null status varchar(10) not null total decimal(19,4) not null items tinyint unsigned not null ordered_at datetime not null shipped_at datetime(6) note text details text order_ref char(36) not null total_with_tax decimal(12,2) customers8 linhas2
8 colunas id int not null name varchar(100) not null email varchar(200) not null country char(2) not null is_active tinyint(1) not null signed_up date created_at datetime not null row_version blob
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 MySQL.
-- Written by IntoSQL from a SQL Server dump. Load it with: mysql --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` char(36) NOT NULL,
`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
- "shipped_at" de orders é datetime2(7), com mais dígitos de segundo do que o MySQL guarda, então vira datetime(6) e os últimos dígitos são cortados.
- "created_at" de customers contém instantes com fuso horário; o MySQL não tem um tipo que o mantenha, então eles são guardados em UTC como datetime.
- "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 MySQL 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 MySQL.
- O CHECK check1 de orders não pode ser escrito para o MySQL (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 MySQL (neither MySQL 5.7 nor MariaDB index an expression), então não é criado. Crie o índice manualmente se as consultas precisarem dele.
- O valor padrão de "order_ref" em orders não pode ser escrito para o MySQL (a default expression needs MySQL 8.0.13), então a coluna fica sem valor padrão. Adicione o valor padrão manualmente se novas linhas precisarem dele.
Seu arquivo é convertido neste computador e nunca é enviado.
Outros exemplos:
O que muda do SQL Server para o MySQL
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 MySQL é 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, e o mesmo vale para texto com valor padrão, que o MySQL 5.7 só dá a varchar.
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 MySQL 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 MySQL 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 MySQL 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
Os mesmos valores JSON, que as funções JSON do MySQL leem.
uniqueidentifier
char(36)
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 MySQL 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 MySQL 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
não criado
O MySQL não tem sequências. Os valores que uma sequência entregou estão nas linhas.
Linha do relatório: sequence_not_converted
computed columns
colunas geradas, STORED quando PERSISTED, VIRTUAL nos outros casos
O MySQL as calcula dos mesmos dois jeitos, com CONCAT escrito para que NULL conte como vazio, como no SQL Server.
computed columns with functions MySQL 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 MySQL 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
O MySQL 5.7 os mantém sem verificar; as outras versões os testam à medida que cada linha carrega.
CHECK constraints with functions MySQL 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 MySQL se precisar.
Linha do relatório: partitions_dropped
temporal tables (SYSTEM_VERSIONING)
duas tabelas: as linhas atuais e o histórico
A tabela e sua tabela de histórico são copiadas como tabelas simples; o MySQL não mantém o histórico sozinho.
Linha do relatório: system_versioning_dropped
schemas
um banco de dados, tabelas com o nome do schema na frente
Os schemas do MySQL 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 Server | No MySQL | Linha do relatório |
|---|---|---|
| bit | tinyint(1)O BOOLEAN do MySQL é 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 dissoO texto mantém cada caractere como utf8mb4. Uma coluna em uma chave é no máximo varchar(768), o maior que uma chave comporta, e o mesmo vale para texto com valor padrão, que o MySQL 5.7 só dá a varchar. | |
| 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 cortadoO MySQL 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 |
| datetimeoffset | datetime(p) em UTCO TIMESTAMP do MySQL 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 |
| time | time(p)Os mesmos horários do dia. | |
| dates before the year 1000 | NULLO MySQL 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) | jsonOs mesmos valores JSON, que as funções JSON do MySQL leem. | |
| uniqueidentifier | char(36)Os mesmos identificadores, escritos em minúsculas. | |
| binary, varbinary, image | binary(n), varbinary(n) e tipos blobBytes continuam sendo bytes. | |
| geometry, geography | blob 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, timestamp | blob, 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, vector | longtextO MySQL 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 |
| IDENTITY | AUTO_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 key | um inteiro simplesO MySQL conta uma coluna por tabela, no início de uma chave; qualquer outra mantém seus valores sem contador. | counter_dropped |
| CREATE SEQUENCE | não criadoO MySQL não tem sequências. Os valores que uma sequência entregou estão nas linhas. | sequence_not_converted |
| computed columns | colunas geradas, STORED quando PERSISTED, VIRTUAL nos outros casosO MySQL as calcula dos mesmos dois jeitos, com CONCAT escrito para que NULL conte como vazio, como no SQL Server. | |
| computed columns with functions MySQL lacks | uma 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 MySQL lacks, and NEXT VALUE FOR | sem valor padrãoUm valor padrão que não pode ser escrito fica de fora e é informado. | default_not_translated |
| CHECK constraints | traduzidosO MySQL 5.7 os mantém sem verificar; as outras versões os testam à medida que cada linha carrega. | |
| CHECK constraints with functions MySQL lacks | não criadoUm CHECK que não pode ser escrito fica de fora e é informado. | check_skipped |
| CHECK constraints added WITH NOCHECK or disabled | não criadoO SQL Server não aplica esses CHECKs, então as linhas podem violá-los. | check_not_enforced |
| filtered and columnstore indexes | não criadoO IntoSQL escreve índices b-tree sobre colunas inteiras; crie os outros de novo depois da carga. | index_skipped |
| foreign keys | chaves 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 create | não criadoUma chave não pode apontar para uma tabela que não existe. | foreign_key_skipped |
| tables on a partition scheme | uma tabela com as linhas de todas as partiçõesAs linhas são as mesmas; particione a tabela de novo no MySQL se precisar. | partitions_dropped |
| temporal tables (SYSTEM_VERSIONING) | duas tabelas: as linhas atuais e o históricoA tabela e sua tabela de histórico são copiadas como tabelas simples; o MySQL não mantém o histórico sozinho. | system_versioning_dropped |
| schemas | um banco de dados, tabelas com o nome do schema na frenteOs schemas do MySQL 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 NULL | NOT 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 functions | listados 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 values | NULLUm conversor que não executa um banco de dados não consegue avaliá-las. | expression_value |
| types IntoSQL doesn't know | longtextO tipo text aceita qualquer valor; mude o tipo depois da carga. | unknown_type |
| NUL characters in text | mantidoO valor é copiado com o caractere NUL escapado. | |
| text that isn't valid in its encoding | os 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 MySQL
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.
mysql --default-character-set=utf8mb4 mydb < sql_server.mysql.sqlAs chaves estrangeiras são criadas como o dump as declara, com FOREIGN_KEY_CHECKS=0 enquanto as linhas carregam, então uma linha que aponta para uma linha que não existe não para a carga.
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 MySQL 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 MySQL.
Perguntas sobre SQL Server para MySQL
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 não são criadas, porque o MySQL não tem, e o relatório avisa.
O que acontece com money, datetimeoffset e outros tipos do SQL Server?
bit vira tinyint(1), money decimal(19,4), uniqueidentifier char(36), e datetimeoffset datetime em UTC. Os schemas viram prefixos do nome da tabela em um único banco. 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 MySQL o script carrega?
MySQL 5.7 e posteriores. Cada script de teste carrega no 5.7 e no 9 e para no primeiro erro se algo der errado.