---
title: "Chuyển cơ sở dữ liệu SQLite sang phiên bản khác"
description: "Chuyển tệp .db hoặc bản dump SQLite thành tập lệnh nạp được trên SQLite 3.31 trở lên, cùng bảng, khóa và dữ liệu, kèm báo cáo mọi thay đổi."
canonical: https://intosql.com/vi/sqlite-sang-sqlite
last_updated: 2026-10-15
---

# Chuyển cơ sở dữ liệu SQLite sang phiên bản khác

Thả tệp cơ sở dữ liệu SQLite (.db, .sqlite, .sqlite3) hoặc SQL mà .dump của sqlite3 viết, và tải xuống tập lệnh nạp được trên SQLite 3.31 trở lên. Mỗi cột giữ kiểu và collation đã khai báo, STRICT được bỏ để phiên bản cũ chấp nhận các bảng, và mọi thay đổi được liệt kê trong báo cáo.

[Hướng dẫn di chuyển SQLite sang SQLite](https://intosql.com/docs/migrations/sqlite-to-sqlite)

[Kiểu dữ liệu từ SQLite sang SQLite](https://intosql.com/docs/types/sqlite-to-sqlite)

## Những gì thay đổi giữa tệp và tập lệnh

Mỗi hàng là một quy tắc trình chuyển đổi áp dụng, kèm dòng báo cáo được ghi khi quy tắc thay đổi dữ liệu của bạn.

| Trong tệp | Trong tập lệnh | Dòng báo cáo |
| --- | --- | --- |
| declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none) | kiểu mà mọi giá trị trong cột đều vừa |  |
| BOOLEAN, BOOL | INTEGER 0 hoặc 1 kèm CHECK |  |
| TEXT, VARCHAR(n), CHAR(n), CLOB | kiểu đã khai báo, giữ nguyên trạng |  |
| DECIMAL(p,s), NUMERIC | kiểu chính xác khi mọi giá trị đều vừa, nếu không thì double |  |
| BLOB, and columns holding bytes | BLOB |  |
| DATE, DATETIME, TIMESTAMP holding ISO 8601 text | DATE, DATETIME dưới dạng văn bản ISO 8601 |  |
| JSON holding JSON text | TEXT |  |
| Infinity in REAL columns | 9e999, vô cực riêng của SQLite |  |
| INTEGER PRIMARY KEY, AUTOINCREMENT | INTEGER PRIMARY KEY, giữ AUTOINCREMENT |  |
| COLLATE NOCASE | COLLATE NOCASE |  |
| generated columns | cột tính toán, STORED hoặc VIRTUAL như trong nguồn |  |
| generated columns with functions IntoSQL doesn't write, and the || operator | một cột thường | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (strftime, randomblob) | không có giá trị mặc định | `default_not_translated` |
| CHECK constraints | được chuyển đổi |  |
| CHECK constraints with functions IntoSQL doesn't write | không được tạo | `check_skipped` |
| partial and expression indexes | không được tạo | `index_skipped` |
| foreign keys (unenforced unless PRAGMA foreign_keys=ON) | cùng các khóa ngoại, được liệt kê bởi PRAGMA foreign_key_check |  |
| foreign keys to tables the dump doesn't create | không được tạo | `foreign_key_skipped` |
| primary keys holding NULL, and NOT NULL columns with values that become NULL | bỏ NOT NULL | `not_null_relaxed` |
| views, triggers and virtual tables (FTS, R*Tree) | được liệt kê trong báo cáo | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | kiểu suy ra từ giá trị | `no_schema` |
| expressions in INSERT values other than the text functions dumps write | NULL | `expression_value` |
| NUL characters in text | được giữ |  |
| text that isn't valid UTF-8 | byte lỗi thành ký tự thay thế | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | sao chép nguyên trạng | `mojibake_suspected` |

## Nạp tập lệnh vào SQLite

Tập lệnh tạo bảng, sao chép các hàng, rồi thêm khóa, chỉ mục và khóa ngoại, nên nạp nhanh và dừng ở lỗi đầu tiên.

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

Khóa ngoại được khai báo trong từng bảng và các hàng được nạp khi tắt kiểm tra khóa ngoại. Sau đó tập lệnh liệt kê mọi hàng trỏ tới hàng không tồn tại, thay vì thất bại giữa chừng.

Với bản dump lớn, hãy nạp vào một tệp mới trên ổ đĩa cục bộ. Tập lệnh nạp mọi thứ trong một giao dịch với đồng bộ đĩa tắt, nên chạy ở tốc độ của ổ đĩa, và lần nạp dừng giữa chừng không để lại bảng dở dang.

Dòng lệnh nạp tệp thẳng vào cơ sở dữ liệu SQLite, không cần tạo tập lệnh. Hoàn toàn miễn phí.

## Tạo bản dump SQLite để có kết quả tốt nhất

Trình chuyển đổi đọc những gì bản dump chứa. Các tùy chọn sau giữ lại nhiều dữ liệu hơn trong đó:

- Chính tệp cơ sở dữ liệu được chuyển đổi nguyên trạng, đọc từng trang trong trình duyệt của bạn. Hãy đóng ứng dụng đang ghi vào tệp trước, để không thay đổi nào bị bỏ lại trong tệp -wal của nó.
- sqlite3 app.db .dump > app.sql ghi cùng cơ sở dữ liệu đó dưới dạng SQL, cũng chuyển đổi được, dạng .sql hoặc .sql.gz.
- DB Browser for SQLite ghi đoạn SQL đó qua File, Export, Database to SQL file, và iterdump() của Python cũng vậy.

## Những gì không được chuyển đổi

View, trigger, thủ tục, hàm và các đối tượng khác viết bằng ngôn ngữ riêng của SQLite được liệt kê theo tên trong báo cáo, không bao giờ bị bỏ âm thầm, để bạn kiểm tra từng cái với phiên bản SQLite bạn nạp vào trước khi tạo lại.

## Câu hỏi về chuyển SQLite giữa các phiên bản

### Bản dump của tôi có bị tải lên không?

Không. Trình chuyển đổi chạy trong trình duyệt và đọc bản dump từ ổ đĩa theo từng phần, nên nó không bao giờ rời khỏi máy tính của bạn. Ứng dụng máy tính và dòng lệnh cũng chuyển đổi ngay trên máy tính của bạn.

### Bản dump có thể lớn đến đâu?

Trình chuyển đổi không bao giờ giữ toàn bộ bản dump trong bộ nhớ: nó đọc tệp hai lần, theo từng đoạn, và ghi tập lệnh trong lúc đọc. Bản dump nhiều gigabyte vẫn chuyển đổi được trong trình duyệt, trong ứng dụng máy tính và bằng dòng lệnh.

### Tôi có thể chuyển đổi trực tiếp tệp .db không?

Có. Thả tệp .db, .sqlite hoặc .sqlite3: tệp được đọc trong trình duyệt của bạn và không bao giờ được tải lên. Văn bản có ký tự NUL và mọi chữ số của một giá trị double đều đến đúng như đã lưu, điều mà .dump có thể cắt bớt.

### Bản dump có thể đến từ những phiên bản SQLite nào?

Tệp cơ sở dữ liệu từ SQLite 3.0 trở lên, dạng UTF-8 hoặc UTF-16, và bản dump từ lệnh .dump của shell sqlite3 hoặc iterdump() của Python. Mọi tệp và bản dump thử nghiệm đến từ sqlite3 3.31 đến 3.54, gồm cả bảng STRICT và WITHOUT ROWID, và được so với nguồn từng ô một.

### Kiểu cột được quyết định thế nào khi SQLite không áp đặt chúng?

Mỗi cột giữ kiểu đã khai báo, COLLATE NOCASE và RTRIM cũng vậy. STRICT được bỏ đi, nên tập lệnh nạp được trên mọi phiên bản từ 3.31.

### INTEGER PRIMARY KEY và AUTOINCREMENT có được giữ không?

Có. INTEGER PRIMARY KEY và AUTOINCREMENT giữ nguyên, và sqlite_sequence tiếp tục từ chỗ bản dump dừng lại.

### Còn khung nhìn và trình kích hoạt thì sao?

Chúng được liệt kê theo tên trong báo cáo và không được chuyển đổi, để bạn tạo lại sau khi đã nạp các bảng.

### Tập lệnh nạp được trên những phiên bản SQLite nào?

SQLite 3.31 trở lên. Mọi tệp và bản dump thử nghiệm đều nạp được trên 3.31 và 3.54, và dừng ở lỗi đầu tiên nếu có sự cố.

## Từ SQLite

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

## Sang SQLite

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

## Hướng dẫn và mọi cặp

- [Hướng dẫn di chuyển SQLite sang SQLite](https://intosql.com/docs/migrations/sqlite-to-sqlite)
- [Kiểu dữ liệu từ SQLite sang SQLite](https://intosql.com/docs/types/sqlite-to-sqlite)
- [Mọi cặp cơ sở dữ liệu](https://intosql.com/vi/chuyen-co-so-du-lieu)
