使用 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 小时间隔