---
title: "Levar um banco SQLite para outra versão"
description: "Converta um arquivo .db ou dump do SQLite em um script que carrega no SQLite 3.31 ou posterior, com as mesmas tabelas, chaves e dados, e um relatório das mudanças."
canonical: https://intosql.com/pt-br/sqlite-para-sqlite
last_updated: 2026-10-15
---

# Levar um banco SQLite para outra versão

Solte um arquivo de banco de dados SQLite (.db, .sqlite, .sqlite3) ou o SQL que o .dump do sqlite3 escreve, e baixe um script que carrega no SQLite 3.31 ou posterior. Cada coluna mantém seu tipo declarado e sua collation, STRICT é omitido para que versões mais antigas aceitem as tabelas, e cada mudança é listada no relatório.

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

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

## O que muda entre o arquivo e o script

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 arquivo | No script | Linha do relatório |
| --- | --- | --- |
| declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none) | o tipo em que cabem todos os valores da coluna |  |
| BOOLEAN, BOOL | INTEGER 0 ou 1 com um CHECK |  |
| TEXT, VARCHAR(n), CHAR(n), CLOB | o tipo declarado, mantido como está |  |
| DECIMAL(p,s), NUMERIC | o tipo exato quando todo valor cabe nele, senão um double |  |
| BLOB, and columns holding bytes | BLOB |  |
| DATE, DATETIME, TIMESTAMP holding ISO 8601 text | DATE, DATETIME como texto ISO 8601 |  |
| JSON holding JSON text | TEXT |  |
| Infinity in REAL columns | 9e999, o infinito próprio do SQLite |  |
| INTEGER PRIMARY KEY, AUTOINCREMENT | INTEGER PRIMARY KEY, AUTOINCREMENT mantido |  |
| COLLATE NOCASE | COLLATE NOCASE |  |
| generated columns | colunas geradas, STORED ou VIRTUAL como na origem |  |
| generated columns with functions IntoSQL doesn't write, and the || operator | uma coluna simples | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (strftime, randomblob) | sem valor padrão | `default_not_translated` |
| CHECK constraints | traduzidos |  |
| CHECK constraints with functions IntoSQL doesn't write | não criado | `check_skipped` |
| partial and expression indexes | não criado | `index_skipped` |
| foreign keys (unenforced unless PRAGMA foreign_keys=ON) | as mesmas chaves estrangeiras, listadas por PRAGMA foreign_key_check |  |
| foreign keys to tables the dump doesn't create | não criada | `foreign_key_skipped` |
| primary keys holding NULL, and NOT NULL columns with values that become NULL | NOT NULL removido | `not_null_relaxed` |
| views, triggers and virtual tables (FTS, R*Tree) | listados no relatório | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | tipos lidos dos valores | `no_schema` |
| expressions in INSERT values other than the text functions dumps write | NULL | `expression_value` |
| NUL characters in text | mantido |  |
| text that isn't valid UTF-8 | os bytes inválidos como o caractere de substituição | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | copiado como está | `mojibake_suspected` |

## 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 < sqlite.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 SQLite para o melhor resultado

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

- O próprio arquivo do banco é convertido como está, lido página por página no navegador. Feche antes o app que escreve nele, para que nenhuma mudança fique para trás no arquivo -wal.
- sqlite3 app.db .dump > app.sql escreve o mesmo banco de dados como SQL, que também é convertido, em .sql ou .sql.gz.
- O DB Browser for SQLite escreve esse SQL com File, Export, Database to SQL file, e o iterdump() do Python também.

## O que não é convertido

Views, triggers, procedures, funções e outros objetos escritos na própria linguagem do SQLite aparecem no relatório pelo nome, nunca são descartados em silêncio, para você conferir cada um com a versão do SQLite em que vai carregar antes de recriá-lo.

## Perguntas sobre levar o SQLite entre versões

### 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.

### Posso converter o próprio arquivo .db?

Sim. Solte o arquivo .db, .sqlite ou .sqlite3: ele é lido no navegador e nunca é enviado. Textos com caracteres NUL e todos os dígitos de um double chegam como foram armazenados, algo que um .dump pode cortar.

### De quais versões do SQLite o dump pode vir?

Arquivos de banco de dados do SQLite 3.0 em diante, em UTF-8 ou UTF-16, e dumps do .dump do shell sqlite3 ou do iterdump() do Python. Cada arquivo e dump de teste vem do sqlite3 3.31 a 3.54, incluindo tabelas STRICT e WITHOUT ROWID, e é comparado com a origem célula por célula.

### Como os tipos de coluna são decididos quando o SQLite não os impõe?

Cada coluna mantém seu tipo declarado, assim como COLLATE NOCASE e RTRIM. STRICT fica de fora, então o script carrega em todas as versões a partir do 3.31.

### INTEGER PRIMARY KEY e AUTOINCREMENT são mantidos?

Sim. INTEGER PRIMARY KEY e AUTOINCREMENT ficam como estão, e sqlite_sequence continua de onde o dump parou.

### E as visões e os gatilhos?

Eles aparecem no relatório pelo nome e não são convertidos, para que você possa recriá-los quando as tabelas estiverem prontas.

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

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

## De SQLite

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

## Para SQLite

- [MySQL para SQLite](https://intosql.com/pt-br/mysql-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)
- [Oracle para SQLite](https://intosql.com/pt-br/oracle-para-sqlite)

## Guia e todos os pares

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