1

我有一个 sqlite3 数据库。无法删除此数据库中的单个表,错误消息显示unknown tokenizer: mm

我直接使用DROP TABLE tablename;最新SQLiteSpy v1.9.11 中的命令以及 .NET 代码和官方 sqlite NuGet包 v 1.0.103 中的命令进行了尝试。

如何删除标记器未知的表?

4

1 回答 1

2

文档说:

对于数据库中的每个 FTS 虚拟表,都会创建三到五个真实(非虚拟)表来存储基础数据。这些真实的表被称为“影子表”。真实表被命名为“%_content”、“%_segdir”、“%_segments”、“%_stat”和“%_docsize”,其中“%”替换为 FTS 虚拟表的名称。

所以要摆脱那个表,删除影子表:

DROP TABLE tablename_content;
DROP TABLE tablename_segdir;
DROP TABLE tablename_segments;
DROP TABLE tablename_stat;
DROP TABLE tablename_docsize;

然后使用(非常危险的)PRAGMA writable_schema从系统表中删除关于该表的剩余信息:

PRAGMA writable_schema = ON;
DELETE FROM sqlite_master WHERE type = 'table' AND name = 'tablename';

SQLite 缓存模式信息,因此您需要关闭并重新打开数据库。

于 2016-11-30T08:34:59.773 回答