2017-04-26 47 views
0

通過添加COALESCE以在唯一約束中實施NULL值,同事創建了一個帶有奇怪UNIQUE鍵(繞過NULL處理)的表。嘗試使用DbVisualizer Pro打開數據庫時出現以下錯誤,但在使用SQLite Expert Professional(我正在試用它們)時似乎打開正常:使用DbVisualizer包含COALESCE()的UNIQUE索引表上的SQLITE_CORRUPT錯誤

SQLITE_CORRUPT:數據庫磁盤映像格式錯誤(畸形的數據庫架構(ux_test) - 近「(」:語法錯誤)

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的錯誤任何人都可以提供任何見解。 into this?FYI,COALESCE()在Unique鍵中,這是因爲SQLite處理NULL值的方式;它看不到NULL中的值相等INT。此外,如果約束條件成立,他們更喜歡使用INSERT OR REPLACE INTO,所以BEFORE觸發器將不起作用。

謝謝。

編輯:CL的答案(下面)似乎是問題; DbVisualizer Pro使用的是SQLite版本3.8.11,而目前的版本是3.18.0。我試圖看看是否可以使用dll的更新,因爲它是一個非常棒的應用程序。謝謝!

回答

1

documentation說:加入

索引表達式的能力與3.9.0版本(2015年10月14日)對於SQLite。對錶達式使用索引的數據庫不能用於早期版本的SQLite。

顯然,您的DbVisualizer是可怕的過時。

+0

DbVisualizer Pro使用的是SQLite版本3.8.11,與當前版本的3.18.0相比。我試圖看看是否可以使用dll的更新,因爲它是一個非常棒的應用程序。謝謝! – Chosun

+0

我通過使用https://support.dbvis.com/support/discussions/topics/1000077593中的步驟解決了該問題。該評論指出: 在下面的網站,你可以下載最新的快照並與DBVisualizer中使用它: https://bitbucket.org/xerial/sqlite-jdbc 一旦下載打開DBVisualizer工具驅動程序管理器,並作出SQLite驅動程序條目的副本。對於下載的jar文件的新入口點。在連接詳情中,使用新的驅動程序條目並連接。 – Chosun

相關問題