返回

SQLite 文件查看器

数据互转

正在载入

正在加载工具

工具代码会在打开时按需载入,请稍候。

本工具的全部运算都发生在你的浏览器中,输入内容不会发送到任何服务器。

关于这个工具

在浏览器中检查较小的独立 SQLite 3 数据库,不上传内容,也不修改原始文件。打开本地 .sqlite、.sqlite3 或 .db 文件,查看保存的表、索引、视图和触发器定义,浏览受支持普通表中的数据。界面生成带正确引用标识符、LIMIT/OFFSET 和 NOT INDEXED 的 SELECT,不接收任意 SQL。实际存储类型标签区分整数、实数、文本、二进制字节及空值,可将首尾均包含的行范围导出为带类型 CSV 或 JSON。固定版本的 sql.js 和 WASM 作为本站资源打包,打开数据库时才启动。数据和结果不持久保存。CSV/JSON 来源的查询请使用独立的本地 SQL 工作台。

常见用途

  • 先检查应用导出数据库的列、声明类型、默认值、主键位置和索引信息,再判断哪张普通表包含需要的记录。
  • 检查本地数据库的一小段数据,保留精确整数标识符、Unicode、空值和二进制内容,避免电子表格软件自动猜测类型。
  • 为数据核对或迁移调查提取最多 1,000 行连续记录,保留所有列和逐单元格类型,源文件保持不变。

使用方法

  1. 1.从来源应用导出一致、独立且未加密的 SQLite 数据库。选择文件后点击“打开数据库”,或使用合成示例。扩展名仅用于文件选择提示;工具会检查头部、结构和大小上限。不支持 WAL 模式文件或附属文件。能够读取结构不等于完整数据库通过完整性认证。
  2. 2.选择结构对象查看保存的 CREATE 定义。普通表展示列和索引元数据;点击浏览生成有界 SELECT,再使用上一页、下一页或跳转页。视图、内部对象及含生成列的表仅展示结构。只要数据库中存在虚拟表,整个数据库都仅展示结构,不读取任何表的数据行。
  3. 3.选择从 1 开始、包含首尾的行范围,按 SQLite 扫描顺序最多选择 1,000 行,然后下载 CSV 或 JSON。空表使用 0–0。导出包含所有列和完整值,与当前预览页无关。建议保持 CSV 表头保护开启。清空、取消或离开工具会释放内存会话,但设备上的下载文件仍然保留。

合成 SQLite 文件的可执行示例

区分 NULL、空文本和空字节

{
  "file": "example.sqlite",
  "table": "records",
  "format": "json",
  "start": 1,
  "end": 2,
  "safe": true,
  "excerptColumns": [
    "id",
    "note",
    "payload"
  ]
}
{
  "columnsExcerpt": [
    "id",
    "note",
    "payload"
  ],
  "rowsExcerpt": [
    [
      {
        "type": "integer",
        "value": "1"
      },
      {
        "type": "null",
        "value": null
      },
      {
        "type": "blob",
        "value": "00FF"
      }
    ],
    [
      {
        "type": "integer",
        "value": "2"
      },
      {
        "type": "text",
        "value": ""
      },
      {
        "type": "blob",
        "value": ""
      }
    ]
  ]
}

内置示例的所选列保留存储类型。第一条记录有 NULL 和两个字节的 BLOB,第二条有空 TEXT 和空 BLOB。包括 1 和 2 在内的所有 INTEGER 都是精确十进制字符串。实际导出包含所有列;excerptColumns 仅用于缩短说明。

读取 UTF-16,保留 Unicode 和 NUL

{
  "file": "utf16le.sqlite",
  "table": "words",
  "format": "json",
  "start": 1,
  "end": 3,
  "safe": true,
  "excerptColumns": [
    "value"
  ]
}
{
  "columnsExcerpt": [
    "value"
  ],
  "rowsExcerpt": [
    [
      {
        "type": "text",
        "value": "猫😀"
      }
    ],
    [
      {
        "type": "text",
        "value": "é"
      }
    ],
    [
      {
        "type": "text",
        "value": "a\u0000b"
      }
    ]
  ]
}

SQLite 解码 UTF-16 LE 数据库。JSON 片段保留汉字、表情、重音字符以及 a 和 b 之间的 NUL。JSON 转义是数据,不是字符串终止符;部分控制字符在预览中可能不可见。

CSV 保留类型及类似公式的文本

{
  "file": "example.sqlite",
  "table": "records",
  "format": "csv",
  "start": 3,
  "end": 3,
  "safe": true,
  "excerptColumns": [
    "code",
    "name",
    "note"
  ]
}
{
  "csvRecordsExcerpt": [
    [
      "code",
      "name",
      "note"
    ],
    [
      "T:003",
      "T:猫😀",
      "T:=SUM(1,2)"
    ]
  ]
}

这里是 CSV 解析后的记录,不是含引号的原始 CSV 文件。前导零代码保留为 T:003,类似公式的文本为 T:=SUM(1,2)。标签始终存在;安全选项保护表头而不改变文本内容。后续移除标签需重新评估电子表格风险。

空表仍导出列信息

{
  "file": "example.sqlite",
  "table": "empty_table",
  "format": "json",
  "start": 0,
  "end": 0,
  "safe": true,
  "excerptColumns": [
    "id",
    "value"
  ]
}
{
  "columnsExcerpt": [
    "id",
    "value"
  ],
  "rowsExcerpt": []
}

零行数据表唯一有效范围为起始 0 / 结束 0。JSON 仍记录有序列名,行数组为空;CSV 仅含表头。支持空表不会制造数据行。

检查 STRICT 表中的实际类型

{
  "file": "schema-edge.sqlite",
  "table": "strict_values",
  "format": "json",
  "start": 1,
  "end": 3,
  "safe": true,
  "excerptColumns": [
    "value"
  ]
}
{
  "columnsExcerpt": [
    "value"
  ],
  "rowsExcerpt": [
    [
      {
        "type": "text",
        "value": "001"
      }
    ],
    [
      {
        "type": "real",
        "value": 1.5
      }
    ],
    [
      {
        "type": "blob",
        "value": "00FF"
      }
    ]
  ]
}

strict_values 示例是一张包含 ANY 列的受支持 STRICT 表。实际值分别为 TEXT、REAL 和 BLOB。工具报告逐单元格类型,不仅根据列声明推断全部值。

浏览普通 WITHOUT ROWID 表

{
  "file": "schema-edge.sqlite",
  "table": "without rowid",
  "format": "json",
  "start": 1,
  "end": 2,
  "safe": true,
  "excerptColumns": [
    "a",
    "b"
  ]
}
{
  "columnsExcerpt": [
    "a",
    "b"
  ],
  "rowsExcerpt": [
    [
      {
        "type": "text",
        "value": "x"
      },
      {
        "type": "integer",
        "value": "1"
      }
    ],
    [
      {
        "type": "text",
        "value": "x"
      },
      {
        "type": "integer",
        "value": "2"
      }
    ]
  ]
}

示例使用带复合主键的普通 WITHOUT ROWID 表,引用的表名包含空格。生成的 SELECT 读取两行并保持整数精度,不假设每张表都有 rowid 列。所示扫描顺序属于此不变的示例文件。

生成列表仅显示结构

{
  "file": "schema-edge.sqlite",
  "table": "generated"
}
{
  "error": "unsupported"
}

generated 表仍展示列和保存的定义,但浏览返回 unsupported。不会为提供预览执行生成表达式。这是支持范围限制,不是数据损坏证据。

不初始化虚拟表扩展

{
  "file": "virtual-fts5.sqlite",
  "table": "docs"
}
{
  "error": "unsupported"
}

FTS5 虚拟表仍作为结构元数据可见,但不能读取。数据库中有任何虚拟表,所有表都会仅显示结构,包括看起来像普通表的扩展影子表。

拒绝 WAL 文件,避免遗漏提交

{
  "file": "wal.sqlite"
}
{
  "error": "wal"
}

WAL 标记文件在头部检查时返回 wal。工具不读取附属文件,也不猜测其中是否包含更新的已提交数据。请从来源应用导出一致性独立副本。

拒绝被截断的数据库

{
  "file": "truncated.sqlite"
}
{
  "error": "format"
}

示例声明的页数与实际文件长度不一致,返回 format,不会作为部分有效数据库返回。其他损坏可能只有读取受影响页面时才能发现。

SQLite 查看常见误区

  • 直接打开正在使用的数据库主文件,忽略 WAL 或恢复日志,而不是导出一致性独立副本。
  • 认为可读结构或成功读取一页就能证明整个数据库的所有页面都完好。
  • 把仅可查看结构的对象当成空表,或期望工具加载虚拟表扩展。
  • 认为声明类型或 NOT NULL 标记完整描述了全部实际存储类型和约束。
  • 把 100,000+ 当作精确总行数,或假设行号按可见 ID 排序。
  • 以为导出只包含预览中的前 12 列或当前页面。
  • 不解码就移除 CSV 类型标签,丢失空值 / 文本 / 二进制差异或重新引入电子表格风险。
  • 以为更换文件、取消、超时或换语言后旧结果与待下载内容仍有效。

限制与说明

  • 输入范围为单个独立、未加密的 SQLite 3 文件,最多 16 MiB,头部须一致且符合支持范围,页面保留字节为零,编码为 UTF-8 或 UTF-16 LE/BE;最多 200 个结构对象,每张普通表最多 128 列。名称最多 1,024 个 UTF-8 字节,单条定义 SQL、默认值或类型文本最多 16 KiB,完整结构摘要最多 512 KiB。不接收 WAL 模式主文件、WAL/SHM 附属文件、SQL 转储文本、远程 URL、加密或扩展专用文件格式。请从来源应用导出一致性副本,不要只复制使用中的主文件。
  • 仅支持浏览普通表。视图、触发器、SQLite 内部对象以及含隐藏列 / 生成列的表仅供查看,不为浏览执行其表达式。任何虚拟表都会禁用整个数据库的数据行访问,包括看起来像普通表的扩展影子表。表和索引元数据仍受支持范围限制。工具对内存副本启用 query_only,生成正确引用标识符并带 LIMIT/OFFSET 和 NOT INDEXED 的 SELECT。不提供自定义 SQL 编辑器、WHERE 筛选、关联、ORDER BY、结构修改、扩展加载、修复或数据库文件导出。
  • 计数最多读取 100,001 行,只开放前 100,000 行;+ 表示行数下限,不是完整表的精确行数。每页预览 25 行、前 12 列,名称显示到 160 字符、值到 500 字符。行号使用当前不变会话的 SQLite 扫描顺序,不代表可移植的排序或插入顺序。每个文本或 BLOB 单元格最多 256 KiB,内部数据行物化及每次序列化导出须小于等于 6 MiB。成功导出包含选定范围的所有列和完整值,最多 1,000 行。超限操作失败,不会静默缩短值后导出。打开和抽样不会执行全文件完整性检查,未读取页面中的损坏可能尚未发现。
  • 所有 INTEGER 都使用精确十进制字符串,包括小整数。REAL 为数字,+Infinity、-Infinity、-0 则使用明确的字符串;这不使 SQLite 运算变为精确运算。TEXT 保留内容及内部 NUL,BLOB 使用大写十六进制。NULL、空 TEXT、空 BLOB 和类似数字的 TEXT 有独立类型标签。JSON 使用有序列名、包含 {type,value} 单元格的行数组,并附表名及范围元数据,是查看格式而非数据库备份。部分控制字符在预览中可能不可见;精确检查文本时请查看 JSON 转义。
  • CSV 使用 UTF-8、逗号分隔和 CRLF 记录分隔。数据值始终带两个字符的标签:N: 为空值、I: 为整数文本、R: 为实数文本、T: 为文本、B: 为大写十六进制字节。N:、T:、B: 相互区别。非空值只移除一次标签即可得到内容,文本本身包含标签时仍保存在 T: 后面。默认开启的公式保护仅对有风险的表头添加前导单引号,不修改数据。关闭保护仍保留所有数据标签,但可能暴露表头公式;后续移除标签会再次带来公式和类型转换风险。每次请求有受浏览器调度影响的 10 秒期限。64 MiB SQLite 堆上限不是 JavaScript、WASM 或浏览器总内存上限。取消、超时、故障、换文件 / 语言、清空和离开工具都会使旧工作失效并释放会话。不上传或存储文件内容,也不传至第三方 CDN;仍需载入本站应用资源,下载文件可能包含敏感值。

常见问题

可以编辑文件或输入自己的 SQL 吗?

不可以。此查看器读取内存副本,绝不写回已选文件。选择受支持普通表后生成有界 SELECT,保存的结构定义仅作为文本显示。不执行任意用户 SQL、筛选、关联或修复。CSV/JSON 导入可使用独立 SQL 工作台;更广泛的 SQLite 操作请使用合适的本地数据库应用。

为什么有效的 WAL 模式数据库也会被拒绝?

已提交状态可能依赖 WAL 附属文件,而工具只接收一个独立文件。它会拒绝 WAL 模式头部,不假设主文件已包含最新状态。请让来源应用生成一致、独立的回滚日志格式副本,不要删除正在使用的应用日志文件来绕过检查。

为什么能看到结构,却看不到数据行?

此工具的安全范围将视图、虚拟表、内部对象和隐藏 / 生成列表设为仅结构。出现任何虚拟表时,整个数据库及其影子表都禁用数据行访问。这不表示源表为空或已损坏。请查看原因标记,需要不支持的数据时使用原应用。

如何在导出中区分 NULL、空文本和二进制?

JSON 为每个单元格保留明确类型和值。CSV 用 N: 表示空值、T: 表示空文本、B: 表示空字节;其他内容位于两个字符的类型前缀之后。整数 1 为 I:1,文本 1 为 T:1。全部整数保留精确十进制文本。带类型 CSV 不是普通的无标签电子表格表格。

相关工具