---
title: "Migrar MySQL para SQLite no navegador"
description: "Migre um banco MySQL ou MariaDB para SQLite: converta o dump em um script com as mesmas tabelas, chaves e dados, e um relatório de cada mudança."
canonical: https://intosql.com/pt-br/mysql-para-sqlite
last_updated: 2026-10-15
---

# Migrar MySQL para SQLite no navegador

Solte um dump do mysqldump, mariadb-dump, mysqlpump, phpMyAdmin ou Adminer, em .sql ou .sql.gz, e baixe um script do SQLite com as mesmas tabelas, chaves, índices e dados. Cada valor que o SQLite não aceita como está, e cada objeto que ele não traz, aparece no relatório.

[Guia de migração de MySQL para SQLite](https://intosql.com/docs/migrations/mysql-to-sqlite)

[Tipos de dados de MySQL para SQLite](https://intosql.com/docs/types/mysql-to-sqlite)

## O que muda do MySQL para o SQLite

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.

| No MySQL | No SQLite | Linha do relatório |
| --- | --- | --- |
| TINYINT(1), BOOL | INTEGER com os valores como estão |  |
| UNSIGNED integers | INTEGER com um CHECK de que não é negativo; BIGINT UNSIGNED com valores acima de 2^63-1 vira TEXT | `unsigned_widened` |
| ZEROFILL and display widths | descartado | `zerofill_dropped` |
| FLOAT(M,D) | REAL, sem a escala | `float_scale_dropped` |
| DECIMAL(p,s) | DECIMAL(p,s) até 15 dígitos; TEXT acima disso | `decimal_as_text` |
| BIT(1), BIT(n) | INTEGER com o valor dos bits; BIT(64) como dígitos em TEXT |  |
| 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 removido | `not_null_relaxed` |
| DEFAULT '0000-00-00' | sem valor padrão | `zero_date_default` |
| TIME | TIME como texto, do jeito que o MySQL escreve, incluindo durações |  |
| YEAR | INTEGER com um CHECK do intervalo |  |
| CHAR(n), VARCHAR(n) | VARCHAR(n), sem limite aplicado |  |
| DATETIME | DATETIME como texto ISO 8601 |  |
| TIMESTAMP | TIMESTAMP como texto ISO 8601 em UTC; no fuso que o dump informa, UTC quando ele não informa nenhum | `timestamp_zone_assumed` |
| ENUM | TEXT com um CHECK dos valores |  |
| ENUM holding '' (MySQL's error value) | o valor vazio, permitido pelo CHECK | `enum_invalid_value` |
| ENUM holding values outside its list | sem CHECK | `enum_check_skipped` |
| SET | TEXT como o MySQL escreve ('a,b') |  |
| JSON | TEXT |  |
| NUL bytes in text | mantido |  |
| text that isn't valid in its character set | os bytes inválidos como o caractere de substituição | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | copiado como está | `mojibake_suspected` |
| AUTO_INCREMENT | INTEGER PRIMARY KEY AUTOINCREMENT, com o contador ajustado depois dos ids copiados |  |
| AUTO_INCREMENT on part of a key or outside one | INTEGER sem contador | `identity_without_counter` |
| ON UPDATE CURRENT_TIMESTAMP | um gatilho AFTER UPDATE | `on_update_trigger` |
| generated columns | GENERATED ALWAYS AS, VIRTUAL ou STORED como na origem |  |
| generated columns with functions SQLite lacks | uma coluna simples | `generated_not_translated` |
| INVISIBLE columns | colunas comuns | `invisible_column` |
| CHECK constraints | traduzido, dentro do CREATE TABLE |  |
| CHECK constraints with functions SQLite lacks | não criado | `check_skipped` |
| CHECK ... NOT ENFORCED | não criado | `check_not_enforced` |
| defaults with functions SQLite lacks | sem valor padrão | `default_not_translated` |
| keys and indexes on a prefix, c(20) | um índice sobre substr(c, 1, 20) | `prefix_unique` |
| FULLTEXT indexes | não criado | `fulltext_not_created` |
| SPATIAL indexes | não criado | `spatial_index_not_created` |
| functional indexes SQLite can't write | não criado | `index_skipped` |
| foreign keys | no CREATE TABLE, carregadas sem verificação, depois listadas por PRAGMA foreign_key_check |  |
| foreign keys to columns without a unique key | não criada | `foreign_key_skipped` |
| table, index and column names | como escritos; renomeados quando diferem só em maiúsculas e minúsculas ou quando um nome de índice se repete | `identifier_renamed` |
| GEOMETRY, POINT, POLYGON... | WKB em um BLOB | `geometry_as_blob` |
| INET4, INET6, UUID (MariaDB) | TEXT |  |
| BINARY, VARBINARY, BLOB | BLOB |  |
| PARTITION BY | uma tabela | `partitions_dropped` |
| WITH SYSTEM VERSIONING (MariaDB) | uma tabela com as linhas atuais | `system_versioning_dropped` |
| MyISAM, MEMORY and other engines | uma tabela comum | `engine_dropped` |
| dumps of several databases | um arquivo, cada tabela com o nome do seu banco na frente | `databases_merged` |
| views, triggers, procedures, functions and events | listados no relatório | `not_converted_objects` |
| dumps without CREATE TABLE | tipos deduzidos dos valores | `no_schema` |
| geometries in a dump without CREATE TABLE | WKB em um BLOB | `geometry_as_blob` |
| _ci collations | comparação exata | `case_insensitive_collation` |
| SET NAMES utf8 from utf8mb4 tables | convertido, com um aviso | `dump_lost_four_byte_chars` |
| dumps without SET NAMES whose text isn't UTF-8 | lido como Latin-1 (Windows-1252) | `charset_guessed` |
| sjis, cp932, gbk, big5 dumps | lido como UTF-8, com um aviso | `unsupported_charset` |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | avaliadas |  |
| other expressions in rows | NULL | `expression_value` |
| DEFAULT in VALUES | o valor padrão da coluna | `default_keyword_filled` |
| DEFAULT in VALUES without a literal default | NULL | `default_keyword_null` |
| REPLACE and INSERT IGNORE | linhas simples | `replace_as_insert` |
| types IntoSQL doesn't know | TEXT | `unknown_type` |
| values that don't fit their column | NULL | `invalid_value_null` |
| unreadable geometries | NULL | `bad_geometry` |
| CREATE SEQUENCE (MariaDB) | não criado | `sequence_not_converted` |
| VECTOR(n) (MariaDB 11.7+) | TEXT com os floats como array JSON | `type_replaced` |

## Carregue o script no SQLite

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.

```shell
sqlite3 -bail mydb.sqlite < mysql.sqlite.sql
```

As chaves estrangeiras são declaradas em cada tabela e as linhas carregam com a verificação de chaves estrangeiras desligada. Depois o script lista cada linha que aponta para uma linha que não existe, em vez de falhar no meio do caminho.

Para um dump grande, carregue em um arquivo novo em um disco local. O script carrega tudo em uma transação com a sincronização desligada, então roda na velocidade do disco, e uma carga interrompida no meio não deixa tabelas incompletas.

A linha de comando carrega o arquivo direto em um banco SQLite, sem escrever um script. É grátis.

## Gere o dump do MySQL para o melhor resultado

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

- --default-character-set=utf8mb4 mantém emoji e outros caracteres de 4 bytes, que um dump em utf8 perde antes de o conversor vê-lo.
- --hex-blob escreve as colunas binárias em hexadecimal, o que sobrevive à cópia entre sistemas.
- --routines --triggers --events adicionam esses objetos ao dump, para que o relatório possa listá-los.

## O que não é convertido

Visões, gatilhos, procedimentos armazenados, funções e eventos são escritos na linguagem própria de cada banco de dados. Eles aparecem no relatório pelo nome, nunca são descartados em silêncio, para que você possa reescrevê-los para o SQLite.

## Perguntas sobre MySQL para SQLite

### 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ê dumps do MariaDB?

Sim. Dumps do mariadb-dump e do MariaDB 10.3 ao 12 são convertidos da mesma forma, incluindo as colunas INET6, INET4 e UUID do MariaDB.

### O que acontece com datas 0000-00-00?

Elas viram NULL: o SQLite guardaria o texto, mas nada lê 0000-00-00 como data. O relatório diz quantas havia em cada coluna.

### Os valores de AUTO_INCREMENT são mantidos?

Sim. Uma coluna AUTO_INCREMENT que é toda a chave primária da tabela vira INTEGER PRIMARY KEY AUTOINCREMENT, cada linha mantém seu id, e o próximo id continua depois do maior. Qualquer outra coluna AUTO_INCREMENT mantém seus valores sem contador, e o relatório avisa.

### TINYINT(1) vira boolean?

Não. O SQLite não tem tipo booleano, então TINYINT(1) é um INTEGER e cada valor fica como está.

### E os procedimentos armazenados e gatilhos?

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. ON UPDATE CURRENT_TIMESTAMP é a exceção: vira um gatilho do SQLite.

### Em quais versões do SQLite o script carrega?

SQLite 3.31 e posteriores. Cada dump de teste carrega no 3.31 e no 3.54 e para no primeiro erro se algo der errado.

## De MySQL

- [MySQL para PostgreSQL](https://intosql.com/pt-br/mysql-para-postgresql)
- [MySQL para MySQL](https://intosql.com/pt-br/mysql-para-mysql)
- [MySQL para MariaDB](https://intosql.com/pt-br/mysql-para-mariadb)
- [MySQL para SQL Server](https://intosql.com/pt-br/mysql-para-sql-server)
- [MySQL para Oracle](https://intosql.com/pt-br/mysql-para-oracle)

## Para SQLite

- [MariaDB para SQLite](https://intosql.com/pt-br/mariadb-para-sqlite)
- [PostgreSQL para SQLite](https://intosql.com/pt-br/postgresql-para-sqlite)
- [SQL Server para SQLite](https://intosql.com/pt-br/sql-server-para-sqlite)
- [SQLite para SQLite](https://intosql.com/pt-br/sqlite-para-sqlite)
- [Oracle para SQLite](https://intosql.com/pt-br/oracle-para-sqlite)

## Guia e todos os pares

- [SQLite para MySQL](https://intosql.com/pt-br/sqlite-para-mysql)
- [Guia de migração de MySQL para SQLite](https://intosql.com/docs/migrations/mysql-to-sqlite)
- [Tipos de dados de MySQL para SQLite](https://intosql.com/docs/types/mysql-to-sqlite)
- [Todos os pares de bancos de dados](https://intosql.com/pt-br/migracao-de-banco-de-dados)
