H2,Sql-Server,MySql中的二进制数据类型

时间:2016-01-15 00:37:11

标签: java mysql sql-server h2 hsqldb

我需要将序列化的Object作为二进制数据存储在H2表中(也可以存储在MySql,SqlServer,Hsqldb等中,因为应用程序可以选择数据库)。这个对象只加权几个字节,它只是一个带有一些字符串,整数和布尔值的POJO,没什么特别的。

我创建VARBINARY(1000)列,使用PreparedStatement设置值并将其保存到表中。我的问题和关注点是,此代码在网站上有效,当我在H2官方网站上阅读有关BINARY数据类型的定义时,他们会说:

  

BINARY类型:   表示字节数组。对于很长的数组,请使用BLOB。最大值   size是2 GB,但是使用它时整个对象都保存在内存中   数据类型。精度是一个尺寸约束;只有实际数据   持续存在。对于大型文本数据,应使用BLOB或CLOB。

让我担心的是他们说" 的陈述,但是当使用这种数据类型"时整个对象都保存在内存中。那么,这个对象实际存在多少时间?应用程序关闭之前?

我(显然)想要的是让这个专栏无休止地保留这一专栏。我试图找到任何其他信息来源,但没有任何运气。

2 个答案:

答案 0 :(得分:0)

BLOB类型不会完全保留在内存中,因此如果您担心内存使用情况,可以使用它。你还存储了多少数据?

H2是一个嵌入式数据库,我不认为它打算扩展到大量数据。如果您正在谈论其他数据库,您应该参考他们的文档以获取详细信息,因为它们不太可能以相同的方式运行。

答案 1 :(得分:0)

HSQLDB和MySQL的最佳数据类型是VARRBINARY(max_bytes_length)。即使对于最小的已保存对象,BINARY(fixed_bytes_length)也会占用相同的空间量,而VARBINARY只占用已保存对象的长度。 max_length参数可以设置为远大于对象的最大预期大小的值。与这些数据库一起,只有在访问数据行时,该值才会保留在内存中。