Java H2、Sql Server、MySql中的二进制数据类型
我需要将序列化的Java H2、Sql Server、MySql中的二进制数据类型,java,mysql,sql-server,h2,hsqldb,Java,Mysql,Sql Server,H2,Hsqldb,我需要将序列化的对象作为二进制数据存储在H2表中(同样在MySql、SqlServer、Hsqldb等中,因为应用程序有选择数据库的选项)。这个对象只重几个字节,它只是一个带有一些字符串、整数和布尔值的POJO,没有什么特别之处 我创建VARBINARY(1000)列,用PreparedStatement设置值,并将其保存到表中。我的问题和我关心的是,这个代码在一个网站上工作,当我在H2官方网站上阅读关于BINARY数据类型的定义时,他们说: 二进制类型: 表示字节数组。对于非常长的数组,请使用
对象
作为二进制数据存储在H2表中(同样在MySql、SqlServer、Hsqldb等中,因为应用程序有选择数据库的选项)。这个对象只重几个字节,它只是一个带有一些字符串、整数和布尔值的POJO,没有什么特别之处
我创建VARBINARY(1000)
列,用PreparedStatement
设置值,并将其保存到表中。我的问题和我关心的是,这个代码在一个网站上工作,当我在H2
官方网站上阅读关于BINARY
数据类型的定义时,他们说:
二进制类型:
表示字节数组。对于非常长的数组,请使用BLOB。最大值
大小为2GB,但使用此选项时,整个对象都保存在内存中
数据类型。精度是一个尺寸约束;只有实际数据是正确的
坚持。对于大型文本数据,应使用BLOB或CLOB
让我担心的是,他们说“但是当使用这种数据类型时,整个对象都保存在内存中”。那么,这个对象在内存中实际保留了多少时间?直到应用程序关闭
我(显然)不想让这篇专栏通过无限期地保留这篇专栏来消耗记忆。我试图找到任何其他信息源,但没有任何运气。BLOB类型不会完全保留在内存中,因此如果您担心内存使用,您可以使用它。您到底存储了多少数据
H2是一个嵌入式数据库,我认为它不打算扩展到大量数据。如果您谈论的是其他数据库,您应该参考它们的文档以了解详细信息,因为它们不太可能以相同的方式运行。BLOB类型不会完全保留在内存中,因此如果您担心内存使用,您可以使用它。您到底存储了多少数据
H2是一个嵌入式数据库,我认为它不打算扩展到大量数据。如果您正在谈论其他数据库,您应该参考它们的文档以了解详细信息,因为它们的行为不太可能相同。HSQLDB和MySQL的最佳数据类型是
VARRBINARY(最大字节长度)
BINARY(固定字节长度)
即使对于最小的保存对象也占用相同的空间量,而VARBINARY
正好占用保存对象的长度。“最大长度”参数可以设置为远大于对象最大预期大小的值。在这些数据库中,只有当访问数据行时,值才会保存在内存中。HSQLDB和MySQL的最佳数据类型是VARRBINARY(最大字节长度)
BINARY(固定字节长度)
即使对于最小的保存对象也占用相同的空间量,而VARBINARY
正好占用保存对象的长度。“最大长度”参数可以设置为远大于对象最大预期大小的值。有了这些数据库,值只有在访问数据行时才会保存在内存中。据我所知,BLOB数据类型用于2GB以外的列,正如我所说,数据只重几个字节,因为它只是POJO的序列化。当你说也是在mysql中,等等。你只是在使用h2
进行测试吗?不,该应用程序允许最终用户选择要使用的最终数据库,因此我也为所有MySql和Sql Server测试相同的代码。我只需要存储少量字节,而不是像H2文档所说的那样将其保存在内存中。这就是为什么我认为BLOB
就像在峡谷中飞翔一样。据我所知,BLOB
数据类型用于2GB以外的列,正如我所说的,数据只重几个字节,因为它只是POJO的序列化。当你说在mysql中也是如此。你只是在使用h2
进行测试吗?不,该应用程序允许最终用户选择要使用的最终数据库,因此我也为所有MySql和Sql Server测试相同的代码。我只需要存储少量字节,而不是像H2文档所说的那样将其保存在内存中。这就是为什么我认为BLOB
就像在峡谷中飞翔。谢谢你的回答。最后一个问题:对于数据类型VARBINARY(max_length)
,max_length
变量的度量是什么?它是以字节、千字节、比特来衡量的吗(我不认为比特是以防万一的)?好的,很好。非常感谢。在各自的文档中,他们提到了一些关于VARBINARY
和BINARY
的信息,但没有提到测量单位,尽管这非常重要。他们可能认为已经理解了,但这是一个可怕的错误,文档必须始终保持对试图描述的对象的完整描述。谢谢您的回答。最后一个问题:对于数据类型VARBINARY(max_length)
,max_length
变量的度量是什么?它是以字节、千字节、比特来衡量的吗(我不认为比特是以防万一的)?好的,很好。非常感谢。在各自的文档中,他们提到了一些关于VARBINARY
和BINARY
的信息,但没有提到测量单位,尽管这非常重要。他们可能认为它已经被理解了,但这是一个可怕的错误,文档必须始终保持对试图描述的对象的完整描述。