打开或粘贴 CSV 文件,检查 表名,然后点击 下载 SQLite。你会得到一个 .sqlite 数据库文件,其中一张表包含所有行,可直接用 sqlite3 命令行、DB Browser for SQLite、Python 或任何 SQLite 库打开。默认情况下每一列都是 TEXT,所以 000417 仍是 000417。SQLite 引擎以 WebAssembly 形式在你的浏览器中运行,CSV 文件不会上传。
如何把 CSV 转换为 SQLite
- 打开
.csv、.tsv或.txt文件,拖到工具上,或粘贴数据。在 输入 下检查表格;如有需要,可在 导入设置 中设置分隔符、表头行或编码(GBK 文件选 GB18030)。 - 检查 表名。它初始为文件名,其中的空格和标点会变成下划线,所以
orders 2026.csv会变成orders_2026。 - 选择 值类型、可选的 主键,以及是否 空单元格写为 NULL。
- 点击 下载 SQLite,然后打开文件,例如运行
sqlite3 orders.sqlite,再执行SELECT * FROM orders LIMIT 10;。
第一次转换时,会从 assets.viewcsv.app 下载一次 SQLite 引擎(编译为 WebAssembly 的 sql.js)。如果下载失败,工具会显示错误,你可以重试;你的文件始终留在本机。
要用相同设置转换多个文件,请选择 批量转换多个文件。每个文件生成各自的数据库,表名取自该文件名,并打包成一个 ZIP 一起下载。批量转换时,每个文件不能超过 25 MB。
数据库中包含什么
一张用 CREATE TABLE "name" (…) 创建的表,每个 CSV 列对应一列,保持原来的顺序,所有行在一个事务中插入。没有额外的索引、视图或 ID 列。
| 表名和列名 | 完全按原样使用并加上双引号,所以空格、标点、保留字和中文等非拉丁名称都能使用:查询时写成 "order date"。空白表头会变成 Column 3,重复表头变成 name (2)。 |
|---|---|
| 所有值都保留为文本 | 默认选项。每一列都声明为 TEXT,每个值都按原样保存。 |
| 识别数字和 true/false | 所有非空值都是不带前导零的整数的列,会变成 INTEGER;有效数字不超过 15 位的小数会变成 REAL;true/false 列会变成保存 1 和 0 的 INTEGER,因为 SQLite 没有布尔类型。日期和其他所有内容都保持为 TEXT。 |
| 主键 | 可选。所选的列会声明为 PRIMARY KEY。它的值必须唯一且不能为空,否则工具会在写出文件之前停止。被识别为整数的主键会变成 INTEGER PRIMARY KEY,即 SQLite 的 rowid 别名。 |
| 空单元格写为 NULL | 默认开启。关闭后,空单元格会保存为空字符串 ''。 |
CSV 中带引号的值内的换行、引号和逗号,都会原样保存在值中。
CSV 转 SQLite 的常见问题
- 转换在主键处停止。 所选的列中有空值或重复值。可以用 CSV 校验 或 CSV 在线查看 找出重复项,另选一列,或把 主键 设为“无”。
- 无法下载引擎。 SQLite 的 WebAssembly 文件来自
assets.viewcsv.app。请检查网络连接、防火墙或内容拦截插件,然后重试。 - `SUM()` 把某列当作文本处理。 该列是
TEXT。请选择 识别数字和 true/false 重新转换;如果仍是文本,说明有某个值不是普通数字(1,234、12 kg、007)。也可以在 SQL 中转换类型:CAST(total AS REAL)。 - 文件超出了这个工具的处理范围。 SQLite 转换适用于 25 MB、10 万行、250 列和 200 万个单元格以内的文件。更大的文件请用 CSV 转 SQL 生成脚本(它能以流式方式处理大文件),再用
sqlite3运行。
限制与隐私
CSV 文件必须能在浏览器工作区中打开:最大 25 MB、10 万行、250 列和 200 万个单元格。数据库在内存中构建,并导出为一个文件。
引擎在当前标签页的后台线程中运行,所以页面保持流畅,点击 取消 即可停止。只会下载引擎文件;CSV 和数据库都不会离开你的设备。
示例:在 sqlite3 命令行中打开订单文件
一份订单文件,包含带前导零的 ID、一个空日期和一条两行的备注,用 识别数字和 true/false 转换,表名为 orders,以 order_id 为 主键,然后用 sqlite3 命令行打开。total 变成了 REAL,paid 变成了值为 1/0 的 INTEGER,而 order_id 和 shipped_on 仍是 TEXT。如果使用默认的 所有值都保留为文本,六列都是 TEXT,total 保留 129.50。
order_id,customer,total,paid,shipped_on,note 000417,"Okafor, Ada",129.50,true,2026-04-02, 000418,Mei Tan,15,false,,"Leave at door side gate"
sqlite> .schema
CREATE TABLE "orders" ("order_id" TEXT PRIMARY KEY, "customer" TEXT, "total" REAL, "paid" INTEGER, "shipped_on" TEXT, "note" TEXT);
sqlite> SELECT order_id, total, typeof(total), paid, shipped_on, quote(note) FROM orders;
000417|129.5|real|1|2026-04-02|NULL
000418|15.0|real|0||'Leave at door
side gate'常见问题
它和“CSV 转 SQL”有什么区别?
这个页面直接给你一个可以打开的 SQLite 数据库文件。CSV 转 SQL 写出的是由 CREATE TABLE 和 INSERT 语句组成的文本脚本,需要你自己运行,可用于 SQLite,也可用于 PostgreSQL、MySQL 或 SQL Server,并且能以流式方式处理超过 25 MB 的文件。
能把 CSV 添加到现有数据库中吗?
不能直接添加;每次转换都会创建一个只含一张表的新数据库。可以在现有数据库中用 ATTACH 'orders.sqlite' AS src; 附加它,再用 INSERT INTO … SELECT * FROM src.orders; 复制数据行。
为什么 true 和 false 保存为 1 和 0?
SQLite 没有布尔存储类型,布尔值就是整数。使用 识别数字和 true/false 时,true 变成 1,false 变成 0。使用文本模式时,它们仍是字符串 true 和 false。