包含COALESCE()的UNIQUE索引的表上的SQLITE_CORRUPT错误,使用DbVisualizer

时间:2017-04-26 13:53:22

标签: database sqlite null unique coalesce

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

SQLITE_CORRUPT:数据库磁盘映像格式错误(格式错误的数据库架构(ux_test) - 接近"(&#34 ;:语法错误)

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

CREATE UNIQUE INDEX ux_test ON Test(val1, COALESCE(val2, -1), COALESCE(val3, -1));

我请DbVisualizer支持这方面的帮助,并被告知这是一个SQLite错误。任何人都可以对此提供任何见解吗?仅供参考,COALESCE()在Unique键中,因为SQLite处理NULL值的方式;它没有看到约束中的NULL值相等。此外,如果点击约束,他们更愿意使用INSERT OR REPLACE INTO,因此BEFORE触发器无法正常工作。

感谢。

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

1 个答案:

答案 0 :(得分:1)

documentation说:

  

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

显然,你的DbVisualizer非常过时。