Migrar de MySQL para SQL Server: o que muda no destino
Se a tabela não existe no SQL Server, o dbSlice para e mostra um CREATE TABLE traduzido para o SQL Server, para o seu DBA revisar e rodar. Por padrão, ele não cria nada nos seus bancos. Estes são os detalhes do MySQL para planejar:
- Colunas
JSON. O MySQL guarda JSON num tipo binário próprio. No SQL Server ele chega como texto emNVARCHAR(MAX); leia comJSON_VALUEeOPENJSON, e acrescente uma constraintISJSONse quiser validá-lo. - Campos de bits
BIT(n).BIT(1)viraBITno SQL Server. UmBIT(8)ouBIT(64)mais largo é um campo de bits, não uma flag. Converta num SELECT (CAST(flags AS UNSIGNED)) e guarde como inteiro. TIMESTAMPxDATETIME. Os valoresTIMESTAMPdo MySQL são guardados em UTC e mostrados no fuso da sessão; então eles chegam nesse fuso. Os dois tipos viramDATETIME2. Defina o fuso da conexão que você quer antes da primeira carga e mantenha o mesmo em todas as execuções.- Inteiros sem sinal. O SQL Server não tem tipos sem sinal; por isso, o dbSlice lê o tipo declarado e sugere um maior, em que o maior valor caiba:
SMALLINT UNSIGNED→INT,INT UNSIGNEDeMEDIUMINT UNSIGNED→BIGINT,BIGINT UNSIGNED→DECIMAL(20,0). - Datas zeradas. Dados antigos do MySQL podem ter
0000-00-00, que o SQL Server rejeita. O dbSlice lê uma data zerada comoNULL, sem mudar nada no MySQL; por isso, a coluna de destino precisa aceitarNULL. - Collation e emoji. As tabelas do MySQL 8 costumam usar
utf8mb4com uma collation que não diferencia maiúsculas nem acentos. O texto viraNVARCHAR, que guarda emoji e qualquer caractere Unicode. Escolha uma collation do SQL Server com o mesmo comportamento para maiúsculas e acentos, ou chaves únicas que diferem só no acento vão colidir. ENUM,SETeYEAR. São sugeridos comoNVARCHAR(MAX). Dê um tamanho a eles e acrescente uma constraintCHECKcom os valores permitidos;YEARfica melhor comoSMALLINT.- Ids
AUTO_INCREMENT. O SQL Server só aceita ids explícitos com Keep identity, que exige permissão de ALTER e é confirmado na tela. Sem essa opção, ids novos são gerados; então não use o id como chave da sincronia. - O Upsert roda como
MERGEe as cargas em massa usamSqlBulkCopy, com triggers e constraints verificados.

Como o dbSlice controla a carga
- Lê o MySQL em lotes pequenos, para o banco em uso continuar atendendo os usuários.
- Casa as linhas por uma chave que você escolhe. Modos: Initial load, depois Upsert, Insert new, Update only ou incremental por coluna (
updated_atou o idAUTO_INCREMENT). - Confere antes de gravar com o Record Diff e as conferências na tela, e prova o resultado com o Compare e a lista completa de chaves divergentes.
- Mascara no caminho as cópias de desenvolvimento e teste, mantendo chaves e chaves estrangeiras intactas.
- Exportar em vez de carregar: quando você só precisa de um arquivo, o mesmo app exporta uma tabela do MySQL para CSV, JSON, XML ou HTML.
Passo a passo: converter uma tabela de MySQL para SQL Server
- Conecte no MySQL e no SQL Server.
- Escolha a tabela de origem (ou um SELECT, como no exemplo do
BIT(n)) e a tabela de destino. - Escolha a coluna-chave, e ligue Keep identity se os ids precisarem continuar iguais.
- Escolha o modo: Initial load, depois Upsert ou Insert new.
- Rode o Record Diff e depois a cópia, ou salve como job para a CLI e o Agendador de Tarefas do Windows.
Mover dados entre MySQL e SQL Server, com qualquer um dos dois como origem
O mesmo app move dados no outro sentido: veja SQL Server para MySQL. No MariaDB, veja MariaDB para SQL Server. Para PostgreSQL, veja MySQL para PostgreSQL.
Perguntas frequentes
O dbSlice converte stored procedures, triggers ou views?
Não. Ele move dados; as rotinas do MySQL precisam ser reescritas em T-SQL.
Preciso de binlog ou replicação ativos no MySQL?
Não. O dbSlice lê as tabelas com consultas comuns.
As execuções incrementais copiam as exclusões?
Não. Rode o Compare ou uma recarga antes da troca.
Existe versão gratuita?
Sim, na Microsoft Store: ela conecta, navega, compara e exporta para CSV. Gravar num destino exige uma licença Desktop ou Server.