2014-11-14 39 views
0

我在我的SQL Server 2008數據庫中有圖片,並且在我添加新圖片給數據庫之前檢查它是否已經存在,因爲我不想有副本。一種有效檢查我的圖像是否已存在於SQL Server 2008數據庫中的方法?

現在我有檢查它:

If EXISTS(SELECT TOP 1 ImageID 
      FROM ImageTable 
      WHERE Image = @Image 
      AND PersonalID = @PersonalID 
      AND CatID = @CatID 
      AND Dev = @Dev 
      ORDER BY ImageID DESC) 

Image是我在Base64編碼的圖像。

收集數據庫中的圖片不是個好主意,因爲我得到的圖片大概是2k和更多,但是我的問題是:檢查圖片是否已經存在於數據庫中,或者有更有效的方法?

+0

那它是哪一個? MySQL或SQL Server? – ps2goat 2014-11-14 22:48:20

+0

理想情況下,您應該基於主鍵進行搜索,然後查看二進制字段是否設置爲空... – user2366842 2014-11-14 22:51:49

+0

對不起,SQL Server當然。我的錯。 – boski 2014-11-14 22:56:01

回答

1

這適用於MySQL或SQL服務器(我不知道哪一個由標題):

當程序觀看圖象,使用算法(幾乎所有的作品,雖然MD5是流行)以計算圖像的校驗和或散列。將另一列添加到您的表中,該列將保存所述校驗和/散列,然後使用它來檢查冗餘映像。

圖像存儲的問題在於,對文件的單個更改會使其「看起來」唯一,即使該更改已經是相同的圖片但是以另一種文件格式(jpg,gif,png)保存已經在數據庫中。

SQL Server有一個名爲HASHBYTES()的函數,但它只能在FIRST 8000字節上運行,所以我會遠離這一點並使用RDBMS不可知方法。

+0

所以我應該爲該列添加校驗和和索引? – boski 2014-11-14 23:10:57

+0

是的,我會添加一個列,並放置和索引。 – 2014-11-15 00:56:23

相關問題