同事从客户那边拷来一个文件夹,里面躺着 data.db,双击没反应,用记事本打开是一片乱码,勉强能认出开头几个字母是 SQLite format 3。到这一步基本可以定案:它是 SQLite 数据库,不是文本文件。

记事本为什么读不出内容

SQLite 的文件头是固定的 16 字节标识,开头就是那行 SQLite format 3 加一个空字节。后面全是二进制页,每页默认 4096 字节,页里存着表结构、索引和行数据。记事本按字符解码,看到的就是方块和怪符号。用十六进制工具看前 16 个字节,能对上就说明是 SQLite,不用靠扩展名猜。

命令行最省事

Windows 下装 sqlite-tools 的压缩包,解出 sqlite3.exe 就能用。进到文件所在目录,先列结构再查数,几条点命令分开敲:

sqlite3 data.db
.tables
.schema user

点命令 .tables 列出所有表,.schema 看建表语句,.quit 退出。要导出成表格文件,先 .mode csv 再 .output out.csv,然后正常写查询。文件被别的程序锁住时可以只读方式打开,启动时加 -readonly 参数。

图形工具更适合翻数据

DB Browser for SQLite 免费开源,把文件拖进去就能看表、改数据、跑 SQL,改完点写入才生效。DBeaver 和 Navicat 也认 SQLite,新建连接时选对驱动。别用 Excel 直接开,它会把二进制当分隔文本硬解析,出来一堆错位的列。

不是所有 .db 都是 SQLite

Windows 的缩略图缓存叫 Thumbs.db,藏在图片目录里,是隐藏文件,删掉会自动重建,跟数据库毫无关系。老系统里 dBASE、Paradox 的表也用 .db 后缀,文件头完全不同。判断顺序很简单:先验文件头有没有 SQLite format 3,没有再考虑其他来源,最省事的是问一句这个文件是哪个软件写出来的。

动手前复制一份

SQLite 是单文件数据库,改错一个字段可能整表回滚不回来。操作前先复制,尤其注意旁边可能还有 -wal 和 -shm 两个伴生文件,拷贝时三个一起拿,只拿 .db 会丢掉最近还没合并的写入。