一位同事通过添加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,因为它确实是一个很棒的应用程序。谢谢!
答案 0 :(得分:1)
将索引表达式的功能添加到SQLite版本3.9.0(2015-10-14)。早期版本的SQLite将无法使用在表达式上使用索引的数据库。
显然,你的DbVisualizer非常过时。