---
title: "数据库迁移：转换数据库转储"
description: "在 MySQL、MariaDB、PostgreSQL、SQL Server、SQLite 和 Oracle 之间迁移：将转储转换为表、键和数据相同的脚本，并报告每项更改。"
canonical: https://intosql.com/zh-cn/database-migration
last_updated: 2026-10-15
---

# 数据库迁移：转换数据库转储

拖入由 mysqldump、mariadb-dump、pg_dump、SSMS、SQL Developer 或 SQLcl 生成的转储，或 SQLite .db 文件，即可下载适用于 PostgreSQL、MySQL、MariaDB、SQLite、SQL Server 或 Oracle 的脚本，表、键、索引和数据都相同。每项更改都会列在报告中，转储不会离开你的电脑。

## 所有数据库组合

行是转储来源的数据库，列是脚本面向的数据库。每个组合都有自己的页面，提供为其设置好的转换器、适用的规则以及导入脚本的方法。

- MySQL: [MySQL 到 PostgreSQL](https://intosql.com/zh-cn/mysql-to-postgresql), [MySQL 到 MySQL](https://intosql.com/zh-cn/mysql-to-mysql), [MySQL 到 MariaDB](https://intosql.com/zh-cn/mysql-to-mariadb), [MySQL 到 SQLite](https://intosql.com/zh-cn/mysql-to-sqlite), [MySQL 到 SQL Server](https://intosql.com/zh-cn/mysql-to-sql-server), [MySQL 到 Oracle](https://intosql.com/zh-cn/mysql-to-oracle)
- MariaDB: [MariaDB 到 PostgreSQL](https://intosql.com/zh-cn/mariadb-to-postgresql), [MariaDB 到 MySQL](https://intosql.com/zh-cn/mariadb-to-mysql), [MariaDB 到 MariaDB](https://intosql.com/zh-cn/mariadb-to-mariadb), [MariaDB 到 SQLite](https://intosql.com/zh-cn/mariadb-to-sqlite), [MariaDB 到 SQL Server](https://intosql.com/zh-cn/mariadb-to-sql-server), [MariaDB 到 Oracle](https://intosql.com/zh-cn/mariadb-to-oracle)
- PostgreSQL: [PostgreSQL 到 PostgreSQL](https://intosql.com/zh-cn/postgresql-to-postgresql), [PostgreSQL 到 MySQL](https://intosql.com/zh-cn/postgresql-to-mysql), [PostgreSQL 到 MariaDB](https://intosql.com/zh-cn/postgresql-to-mariadb), [PostgreSQL 到 SQLite](https://intosql.com/zh-cn/postgresql-to-sqlite), [PostgreSQL 到 SQL Server](https://intosql.com/zh-cn/postgresql-to-sql-server), [PostgreSQL 到 Oracle](https://intosql.com/zh-cn/postgresql-to-oracle)
- SQL Server: [SQL Server 到 PostgreSQL](https://intosql.com/zh-cn/sql-server-to-postgresql), [SQL Server 到 MySQL](https://intosql.com/zh-cn/sql-server-to-mysql), [SQL Server 到 MariaDB](https://intosql.com/zh-cn/sql-server-to-mariadb), [SQL Server 到 SQLite](https://intosql.com/zh-cn/sql-server-to-sqlite), [SQL Server 到 SQL Server](https://intosql.com/zh-cn/sql-server-to-sql-server), [SQL Server 到 Oracle](https://intosql.com/zh-cn/sql-server-to-oracle)
- SQLite: [SQLite 到 PostgreSQL](https://intosql.com/zh-cn/sqlite-to-postgresql), [SQLite 到 MySQL](https://intosql.com/zh-cn/sqlite-to-mysql), [SQLite 到 MariaDB](https://intosql.com/zh-cn/sqlite-to-mariadb), [SQLite 到 SQLite](https://intosql.com/zh-cn/sqlite-to-sqlite), [SQLite 到 SQL Server](https://intosql.com/zh-cn/sqlite-to-sql-server), [SQLite 到 Oracle](https://intosql.com/zh-cn/sqlite-to-oracle)
- Oracle: [Oracle 到 PostgreSQL](https://intosql.com/zh-cn/oracle-to-postgresql), [Oracle 到 MySQL](https://intosql.com/zh-cn/oracle-to-mysql), [Oracle 到 MariaDB](https://intosql.com/zh-cn/oracle-to-mariadb), [Oracle 到 SQLite](https://intosql.com/zh-cn/oracle-to-sqlite), [Oracle 到 SQL Server](https://intosql.com/zh-cn/oracle-to-sql-server), [Oracle 到 Oracle](https://intosql.com/zh-cn/oracle-to-oracle)

[每个组合的数据类型](https://intosql.com/docs/types#from-one-database-to-another)

## 保留什么，报告什么

转换器无需数据库服务器，直接读取转储，并根据其内容写出脚本。每个组合的页面列出它适用的规则 (每个组合 25 到 67 条)，以及每条规则写入报告的内容。

### 保留在脚本中

- 表和列，各自使用目标中最接近的类型，并保留长度和精度。
- 主键、唯一键、外键、索引和默认值。
- AUTO_INCREMENT、标识列和 serial 列，保留每行的 ID，计数器从转储停下的地方继续。
- 每一行，日期、小数、文本和二进制值与转储中一致。

### 列在报告中

- 目标无法原样存储的值，例如 PostgreSQL 中的 0000-00-00 日期，并注明所在列和数量。 (`invalid_date_null`)
- 目标没有的类型，例如 ENUM 或 INET6，以及各自转换后的类型。 (`type_replaced`)
- 视图、触发器、存储过程、函数和事件，按名称列出：它们用各数据库自己的语言编写，因此不做转换。 (`not_converted_objects`)
- 在其字符集中无效的文本，以及已经丢失 4 字节字符的转储。 (`invalid_utf8_replaced`)

## 与 pgloader 的实测对比

2026 年 10 月，在同一台机器（10 核 i9-10900K，配 SATA SSD）上，用 IntoSQL 和 pgloader 3.6.7 转换并导入相同的转储。

- 一个包含 2、-1 和 -5 的 TINYINT(1) 列：pgloader 将每个值都导入为 true，且没有警告。IntoSQL 保留这些数字，报告会说明原因。
- 一个转储包含默认值 'it's'、名称带反引号的表、包含空值的 ENUM 以及超过 24 小时的 TIME：pgloader 会中止。IntoSQL 能转换并导入它。
- pgloader 导入的结果丢失了主键、唯一键、外键和标识列。IntoSQL 全部保留。
- 一个 5.3 GB、3000 万行的转储：pgloader 需要先将其恢复到运行中的 MySQL，耗时 18 分钟，之后在默认设置下内存不足。IntoSQL 在 10 秒内转换该转储，psql 导入脚本约需 3 分钟。
- 476 个来自 MySQL 5.5 到 9 和 MariaDB 10.3 到 12 的转储，导入 PostgreSQL 13 和 18：没有导入错误，也没有任何值在报告中无记录的情况下被更改。

[MySQL 到 PostgreSQL 页面](https://intosql.com/zh-cn/mysql-to-postgresql)

## 导出你的数据库

转换器读取的是文件，而不是正在运行的服务器。每种数据库都用自己的工具写出文件：

### MySQL

由 mysqldump、mysqlpump、phpMyAdmin 或 Adminer 生成的转储，格式为 .sql 或 .sql.gz。使用 --default-character-set=utf8mb4 --hex-blob --routines --triggers --events 可保留最多内容。 [MySQL 到 PostgreSQL 迁移指南](https://intosql.com/docs/migrations/mysql-to-postgresql)

### MariaDB

由 mariadb-dump、mysqldump、phpMyAdmin 或 Adminer 生成的转储，格式为 .sql 或 .sql.gz，选项与 MySQL 相同。 [MariaDB 到 PostgreSQL 迁移指南](https://intosql.com/docs/migrations/mariadb-to-postgresql)

### PostgreSQL

由 pg_dump 或 pg_dumpall 生成的纯文本转储。自定义归档 (-Fc) 可用 pg_restore -f dump.sql 转为纯文本，无需服务器。 [PostgreSQL 到 MySQL 迁移指南](https://intosql.com/docs/migrations/postgresql-to-mysql)

### SQL Server

SSMS 的生成脚本功能写出的脚本，需将要编写脚本的数据类型设为架构和数据。dbatools 和 mssql-scripter 写出的也一样。 [SQL Server 到 PostgreSQL 迁移指南](https://intosql.com/docs/migrations/sql-server-to-postgresql)

### SQLite

数据库文件本身 (.db、.sqlite、.sqlite3)，或 sqlite3 app.db .dump 写出的 SQL。 [SQLite 到 PostgreSQL 迁移指南](https://intosql.com/docs/migrations/sqlite-to-postgresql)

### Oracle

SQL Developer 的数据库导出或 SQLcl 写出的 .sql 文件，包含 DDL 和 Insert 语句。来自 exp 或 expdp 的 .dmp 文件需要先导入再重新导出。 [Oracle 到 PostgreSQL 迁移指南](https://intosql.com/docs/migrations/oracle-to-postgresql)

## 关于数据库迁移的问题

### 我的转储会被上传吗？

不会。转换器在你的浏览器中运行，分块从磁盘读取转储，因此转储不会离开你的电脑。桌面应用和命令行也在你的电脑上转换。

### 转储可以多大？

转换器从不把整个转储放进内存：它按范围读取文件两次，边读边写出脚本。几 GB 的转储可以在浏览器、桌面应用和命令行中转换。

### 转储可以来自哪些版本？

MySQL 5.5 到 9、MariaDB 10.3 到 12、PostgreSQL 10 及以上、SQL Server 2017 及以上、SQLite 3.0 及以上，以及 Oracle 11g 及以上。每个组合的页面会说明其脚本可导入哪些版本。

### 需要正在运行的数据库服务器吗？

不需要。转换器直接读取转储文件，源数据库无需在任何地方运行。脚本可用目标自带的客户端导入，例如 psql、mysql 或 sqlcmd。

### 哪些内容不会被转换？

视图、触发器、存储过程、函数和事件用各数据库自己的语言编写，因此改为按名称列在报告中。表、键、索引和行都在脚本中。

### 可以把脚本直接导入我的数据库吗？

桌面应用和 intosql load 命令可免费直接写入 SQLite，使用 IntoSQL Pro 可直接写入 PostgreSQL、MySQL 和 MariaDB。SQL Server 和 Oracle 请用 sqlcmd 或 sqlplus 运行脚本。
