2014-11-14 38 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

相关问题