---
title: "Pasar una base de datos SQLite a otra versión"
description: "Convierte un archivo .db o un volcado de SQLite en un script que carga en SQLite 3.31 y posteriores, con las mismas tablas, claves y datos, y un informe de cambios."
canonical: https://intosql.com/es/sqlite-a-sqlite
last_updated: 2026-10-15
---

# Pasar una base de datos SQLite a otra versión

Suelta un archivo de base de datos SQLite (.db, .sqlite, .sqlite3) o el SQL que escribe .dump de sqlite3, y descarga un script que carga en SQLite 3.31 y posteriores. Cada columna conserva su tipo declarado y su collation, STRICT se omite para que las versiones anteriores acepten las tablas, y cada cambio aparece en el informe.

[Guía de migración de SQLite a SQLite](https://intosql.com/docs/migrations/sqlite-to-sqlite)

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

## Qué cambia entre el archivo y el script

Cada fila es una regla que aplica el convertidor, con la línea que escribe en el informe cuando la regla cambia algo en tus datos.

| En el archivo | En el script | Línea del informe |
| --- | --- | --- |
| declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none) | el tipo en el que caben todos los valores de la columna |  |
| BOOLEAN, BOOL | INTEGER 0 o 1 con un CHECK |  |
| TEXT, VARCHAR(n), CHAR(n), CLOB | el tipo declarado, tal cual |  |
| DECIMAL(p,s), NUMERIC | el tipo exacto cuando cada valor cabe en él, si no un 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, el infinito propio de SQLite |  |
| INTEGER PRIMARY KEY, AUTOINCREMENT | INTEGER PRIMARY KEY, se conserva AUTOINCREMENT |  |
| COLLATE NOCASE | COLLATE NOCASE |  |
| generated columns | columnas generadas, STORED o VIRTUAL como en el origen |  |
| generated columns with functions IntoSQL doesn't write, and the || operator | una columna simple | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (strftime, randomblob) | sin valor predeterminado | `default_not_translated` |
| CHECK constraints | traducidos |  |
| CHECK constraints with functions IntoSQL doesn't write | no se crea | `check_skipped` |
| partial and expression indexes | no se crea | `index_skipped` |
| foreign keys (unenforced unless PRAGMA foreign_keys=ON) | las mismas claves foráneas, listadas por PRAGMA foreign_key_check |  |
| foreign keys to tables the dump doesn't create | no se crea | `foreign_key_skipped` |
| primary keys holding NULL, and NOT NULL columns with values that become NULL | sin NOT NULL | `not_null_relaxed` |
| views, triggers and virtual tables (FTS, R*Tree) | listados en el informe | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | tipos leídos de los valores | `no_schema` |
| expressions in INSERT values other than the text functions dumps write | NULL | `expression_value` |
| NUL characters in text | se conserva |  |
| text that isn't valid UTF-8 | los bytes incorrectos como carácter de reemplazo | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | se copia tal cual | `mojibake_suspected` |

## Carga el script en SQLite

El script crea las tablas, copia las filas y luego agrega claves, índices y claves foráneas, así que carga rápido y se detiene en el primer error.

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

Las claves foráneas se declaran en cada tabla y las filas se cargan con la comprobación de claves foráneas desactivada. Luego el script lista cada fila que apunta a una fila que no existe, en lugar de fallar a medias.

Para un volcado grande, carga en un archivo nuevo en un disco local. El script carga todo en una sola transacción con la sincronización desactivada, así que va a la velocidad del disco, y una carga que se detiene a medias no deja tablas incompletas.

La línea de comandos carga el archivo directo en una base de datos SQLite, sin escribir un script. Es gratis.

## Haz el volcado de SQLite para el mejor resultado

El convertidor lee lo que contiene el volcado. Estas opciones conservan más de tus datos en él:

- El archivo de la base de datos se convierte tal cual, leído página por página en tu navegador. Cierra primero la app que escribe en él, para que ningún cambio se quede en su archivo -wal.
- sqlite3 app.db .dump > app.sql escribe la misma base de datos como SQL, que también se convierte, en .sql o .sql.gz.
- DB Browser for SQLite escribe ese SQL con File, Export, Database to SQL file, y también lo hace iterdump() de Python.

## Qué no se convierte

Las vistas, disparadores, procedimientos, funciones y otros objetos escritos en el propio lenguaje de SQLite aparecen en el informe por nombre, nunca se descartan en silencio, para que revises cada uno contra la versión de SQLite en la que cargas antes de recrearlo.

## Preguntas sobre pasar SQLite entre versiones

### ¿Se sube mi volcado?

No. El convertidor se ejecuta en tu navegador y lee el volcado de tu disco por partes, así que nunca sale de tu computadora. La app de escritorio y la línea de comandos también convierten en tu computadora.

### ¿Qué tan grande puede ser el volcado?

El convertidor nunca tiene todo el volcado en memoria: lee el archivo dos veces, por rangos, y escribe el script sobre la marcha. Los volcados de varios gigabytes se convierten en el navegador, en la app de escritorio y con la línea de comandos.

### ¿Puedo convertir directamente el archivo .db?

Sí. Suelta el archivo .db, .sqlite o .sqlite3: se lee en tu navegador y nunca se sube. El texto con caracteres NUL y cada dígito de un double llegan tal como están guardados, algo que un .dump puede recortar.

### ¿De qué versiones de SQLite puede venir el volcado?

Archivos de base de datos de SQLite 3.0 en adelante, en UTF-8 o UTF-16, y volcados del .dump del shell sqlite3 o de iterdump() de Python. Cada archivo y volcado de prueba viene de sqlite3 3.31 a 3.54, con tablas STRICT y WITHOUT ROWID incluidas, y se compara con su origen celda por celda.

### ¿Cómo se deciden los tipos de columna si SQLite no los aplica?

Cada columna conserva su tipo declarado, y lo mismo COLLATE NOCASE y RTRIM. STRICT se deja fuera, así que el script carga en todas las versiones desde la 3.31.

### ¿Se conservan INTEGER PRIMARY KEY y AUTOINCREMENT?

Sí. INTEGER PRIMARY KEY y AUTOINCREMENT se quedan tal cual, y sqlite_sequence sigue donde lo dejó el volcado.

### ¿Qué pasa con las vistas y los disparadores?

Aparecen en el informe por nombre y no se convierten, para que puedas volver a crearlos una vez cargadas las tablas.

### ¿En qué versiones de SQLite carga el script?

SQLite 3.31 y posteriores. Cada archivo y volcado de prueba carga en 3.31 y 3.54, y se detiene en el primer error si algo sale mal.

## Desde SQLite

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

## Hacia SQLite

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

## Guía y todos los pares

- [Guía de migración de SQLite a SQLite](https://intosql.com/docs/migrations/sqlite-to-sqlite)
- [Tipos de datos de SQLite a SQLite](https://intosql.com/docs/types/sqlite-to-sqlite)
- [Todos los pares de bases de datos](https://intosql.com/es/migracion-de-bases-de-datos)
