使用 DbVisualizer 在具有包含 COALESCE() 的唯一索引的表上出现 SQLITE_CORRUPT 错误

Posted

技术标签:

【中文标题】使用 DbVisualizer 在具有包含 COALESCE() 的唯一索引的表上出现 SQLITE_CORRUPT 错误【英文标题】:SQLITE_CORRUPT error on table with UNIQUE index containing COALESCE() using DbVisualizer 【发布时间】:2017-04-26 13:53:21 【问题描述】:

一位同事通过添加 COALESCE 以在唯一约束中强制 NULL 值,创建了一个具有奇怪 UNIQUE 键的表(以绕过 NULL 处理)。我在尝试使用 DbVisualizer Pro 打开数据库时收到以下错误,但在使用 SQLite Expert Professional 时似乎可以正常打开(我正在试用它们):

SQLITE_CORRUPT:数据库磁盘映像格式错误(格式错误的数据库架构(ux_test)-靠近“(”:语法错误)

DDL: CREATE TABLE Test ( Id integer NOT NULL PRIMARY KEY AUTOINCREMENT, val1 integer, val2 integer, val3 integer );

创建唯一索引 ux_test ON Test(val1, COALESCE(val2, -1), COALESCE(val3, -1));

我向 DbVisualizer 支持寻求帮助,并被告知这是 SQLite 错误。任何人都可以对此提供任何见解吗?仅供参考,由于 SQLite 处理 NULL 值的方式, COALESCE() 位于唯一键中;它没有看到约束中的 NULL 值相等。此外,如果遇到约束,他们更喜欢使用INSERT OR REPLACE INTO,因此BEFORE 触发器将不起作用。

谢谢。

编辑:CL 的回答(如下)似乎是问题所在; DbVisualizer Pro 使用的是 SQLite 版本 3.8.11,而当前版本是 3.18.0。我正在尝试查看是否可以更新所使用的 dll,因为它确实是一个很棒的应用程序。谢谢!

【问题讨论】:

【参考方案1】:

documentation 说:

索引表达式的功能已添加到 SQLite 版本 3.9.0 (2015-10-14)。早期版本的 SQLite 将无法使用对表达式使用索引的数据库。

显然,您的 DbVisualizer 已经过时了。

【讨论】:

DbVisualizer Pro 使用的是 SQLite 版本 3.8.11,而当前版本是 3.18.0。我正在尝试查看是否可以更新所使用的 dll,因为它确实是一个很棒的应用程序。谢谢! 我使用support.dbvis.com/support/discussions/topics/1000077593 中的步骤解决了这个问题。评论指出:在以下网站中,您可以下载最新的快照并将其与 DbVisualizer 一起使用:bitbucket.org/xerial/sqlite-jdbc 下载后,在 DbVisualizer 中打开驱动程序管理器并复制 SQLite 驱动程序条目。对于下载的 jar 文件的新入口点。在 Connection details 中使用新的驱动程序条目并连接。

以上是关于使用 DbVisualizer 在具有包含 COALESCE() 的唯一索引的表上出现 SQLITE_CORRUPT 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 DBVisualizer 中用 SQL 表示从现在开始向后的 2 小时间隔

如何使用dbvisualizer

dbvisualizer 自动显示表明

找不到模块 coa/compile.js

用dbvisualizer 怎么连接 MS SQL Server

Python模拟radius coa报文