Java 如何识别MySql数据库中的二进制数据

Java 如何识别MySql数据库中的二进制数据,java,mysql,database,database-design,md5,Java,Mysql,Database,Database Design,Md5,我有一个数据库,存储一些数据的位置。为了简单起见,让我们来做吧 Resource ---------- id (PK) resourceLocation 在我用Java编写的应用程序中,我所拥有的只是存储在resourceLocation的文件的二进制数据。有了这些二进制数据,我需要某种方法从数据库中获取这些记录 我唯一能想到的就是这样的事情。在资源表中添加一个名为md5的新列。这将存储位于resourceLocation的文件的MD5 Resource ---------- id (PK)

我有一个数据库,存储一些数据的位置。为了简单起见,让我们来做吧

Resource
----------
id (PK)
resourceLocation
在我用Java编写的应用程序中,我所拥有的只是存储在
resourceLocation
的文件的二进制数据。有了这些二进制数据,我需要某种方法从数据库中获取这些记录

我唯一能想到的就是这样的事情。在
资源
表中添加一个名为md5的新列。这将存储位于resourceLocation的文件的MD5

Resource
----------
id (PK)
resourceLocation
md5
然后在我的代码中,当我只有二进制数据时,我可以简单地获得数据的MD5,并能够在数据库中找到记录


我对这种方法有几个问题。首先,谁能想出一个更好的方法呢。第二,是否有比MD5更好的散列算法用于此目的。我担心的是,最终可能会有两个文件创建相同的MD5哈希。如果发生这种情况,我的方法就会失败。

您的方法听起来不错,假设您真的无法从Java内部获得
resourceLocation
。为什么呢?没有文件路径,您是如何发现文件内容的?或者您正在尝试查看接收到的文件是否与数据库中已有的文件匹配?两个文件发生MD5哈希冲突的概率应为1/2^128(约340万亿),但如果是针对安全应用程序,则可以故意创建冲突文件。其他散列算法(如SHA-1)更安全,但我认为MD5对于这个目的来说已经足够了。@eggyal,+1,在这里想知道他如何在不从文件位置开始的情况下处理文件。散列都很好,但绝对可以肯定的是,如果安全性是一个巨大的问题,那么也可以对散列值进行盐分。另一件你必须考虑的问题是,在散列计算中,当散列计算随着有效载荷大小和系统资源的降级而对大型文件进行回溯的效率时,最终必须在更快或更有效的散列算法之间做出决定。干杯