我的 Windows 应用程序(用 C 编写)使用 SQLite(使用嵌入式合并源)来存储离线数据,并且在多字节字符集构建中没有任何问题。我现在将代码库转换为 Unicode。SQLite 非常愉快地使用 Unicode 构建运行,以 UTF-16LE 编码创建 SQLite 数据库。
不过,我遇到了一件非常奇怪的事情。如果我运行查询PRAGMA journal_mode = DELETE
(实际上,将其设置为任何允许的值,包括OFF
,执行相同的操作),一切都运行良好,直到代码关闭数据库,此时调用sqlite3_close()
返回SQLITE_BUSY
,并出现错误"unable to close due to unfinalised statements"
。
即使我在数据库上运行的唯一查询是单个 pragma 命令,也会发生这种情况!我可以很好地运行其他 pragma(例如"PRAGMA synchronous = NORMAL"
)和我的所有 SQL 查询,并且数据库将非常愉快地关闭;正是这个journal_mode
编译指示导致了这种奇怪的行为,并且仅在代码的 Unicode 构建中 - 多字节构建没有显示这个问题。无论数据库是否已经存在 [在 UTF-16LE 模式下],或者它是否在第一次打开时创建它,都会发生这种情况。
有什么想法可能是错的吗?我正在使用 SQLite 构建 v3.7.11。