在数据库上存储文件

时间:2010-08-27 20:16:25

标签: java sql database

我必须使用Java将数据以任何格式(XLS,PDF,DOC,JPG ....)保存在数据库中。根据我的经验,我会通过将文件的二进制数据存储到BLOB类型字段中来做到这一点,有人告诉我,另一种方法是使用BASE64将二进制数据编码为Text并将字符串存储在TEXT类型字段中。哪一个是执行此任务的最佳选择?。

感谢。

Paul Manjarres

4 个答案:

答案 0 :(得分:8)

BLOB会更好,因为你可以使用byte []数据类型,而不必从BASE64编码/解码。没有理由使用BASE64进行简单存储。

答案 1 :(得分:1)

使用BLOB的论点是它需要更少的CPU周期,更少的磁盘和网络i / o,更少的代码,并减少错误的可能性:

  1. 正如Will Hartung所说,使用BLOB可以跳过编码/解码步骤,这将减少CPU周期。此外,有许多用于Base64编码和解码的Java库,并且在实现中存在细微差别(即PEM线包装)。这意味着安全,应该使用相同的库进行编码和解码。这会在创建记录的应用程序和读取记录的应用程序之间产生不必要的耦合。
  2. 编码输出将大于原始字节,这意味着它将占用更多磁盘空间(和网络i / o)。

答案 2 :(得分:0)

使用BLOB将它们放入数据库

答案 3 :(得分:0)

  • FILE到BLOB = DB不会查询内容并将其视为......井......无意义的二进制BLOB,无论其内容如何。 DB知道此字段可能是1KB或1GB,并相应地分配资源。
  • FILE到TEXT = DB可以查询这个东西。可以在文件中替换修改的字符串进行搜索。但这次DBMS将花费更多资源来使这件事工作。字段内可能有100个字符长的文本,可能存储或不存储100万个字符长文本。文件可以具有任何类型的文本编码,并且由于表/数据库编码设置,可能会丢失无效字符。如果不在SQL查询中使用文件的内容,则无需使用此文件。
  • BASE64 =将任何内容转换为可爱的超有效文本。努力绕过每个兼容性问题。存储在任何地方,打印,电报,将其写在纸上,将您喜欢的自拍转换为私钥。输出将毫无意义且更大,但它将是一个普通的文本。