我有一个 sqlite3 数据库。无法删除此数据库中的单个表,错误消息显示unknown tokenizer: mm
。
我直接使用DROP TABLE tablename;
最新SQLiteSpy v1.9.11 中的命令以及 .NET 代码和官方 sqlite NuGet包 v 1.0.103 中的命令进行了尝试。
如何删除标记器未知的表?
文档说:
对于数据库中的每个 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 缓存模式信息,因此您需要关闭并重新打开数据库。