跳到工具
ViewCSV
无需上传文件

把 CSV 转换为 SQLite 数据库

orders.csv· 示例数据15 行 · 8 列
值类型
保留为文本时所有值原样保存。开启识别后,所有值都符合的列使用 INTEGER 或 REAL。
orders.csv
#order_idcustomercityproductquantityunit_priceorder_datestatus
1001041磊 黄北京Coffee beans 1kg7139.122026-01-27pending
2001042杰 徐北京Coffee beans 1kg2132.102026-02-14shipped
3001043伟 孙上海Notebook A57129.752026-03-22pending
4001044敏 杨上海Chair, ergonomic1122.252026-04-25paid
5001045静 王成都Coffee beans 1kg9·2026-05-15refunded
6001046伟 黄北京Desk lamp8104.232026-06-06refunded
7001047 伟 吴 成都USB-C cable5225.652026-07-08refunded
8001048杰 李南京Coffee beans 1kg774.982026-08-11refunded
9001049磊 王南京Monitor 27"9223.842026-09-22pending
10001050艳 吴南京Desk lamp391.942026-01-02shipped
11001051娜 刘深圳Monitor 27"2216.982026-02-18pending
12001052磊 刘上海Chair, ergonomic8136.302026-03-22pending
13001053静 张北京Desk lamp4238.822026-04-25pending
14001054艳 陈南京USB-C cable495.922026-05-21paid
15001043伟 孙上海Notebook A57129.752026-03-22pending

15 行 · 1 个文件 使用 SQLite 引擎(WebAssembly),从 assets.viewcsv.app 下载一次。你的数据只留在当前标签页中。

打开或粘贴 CSV 文件,检查 表名,然后点击 下载 SQLite。你会得到一个 .sqlite 数据库文件,其中一张表包含所有行,可直接用 sqlite3 命令行、DB Browser for SQLite、Python 或任何 SQLite 库打开。默认情况下每一列都是 TEXT,所以 000417 仍是 000417。SQLite 引擎以 WebAssembly 形式在你的浏览器中运行,CSV 文件不会上传。

如何把 CSV 转换为 SQLite

  1. 打开 .csv、.tsv 或 .txt 文件,拖到工具上,或粘贴数据。在 输入 下检查表格;如有需要,可在 导入设置 中设置分隔符、表头行或编码(GBK 文件选 GB18030)。
  2. 检查 表名。它初始为文件名,其中的空格和标点会变成下划线,所以 orders 2026.csv 会变成 orders_2026。
  3. 选择 值类型、可选的 主键,以及是否 空单元格写为 NULL。
  4. 点击 下载 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。

CSV
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(sqlite3 命令行)
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。

标准与参考资料