什么是在数据库中创建可变长度文本字段的最“独立于数据库”的方式

时间:2010-05-25 18:32:59

标签: sql database jdbc

我想在数据库中创建一个文本字段,没有特定的大小(在某些情况下它会存储长度未知的文本) - 特定的文本是序列化的简单对象(~JSON)

最独立于数据库的方法是什么: - 没有指定大小的varchar(不要认为所有db都支持这个) - 一个'文本'字段,这似乎很常见,但我不相信它是一个标准 - 那种斑点或其他物体? - 一个非常大的varchar(效率低,可能浪费磁盘空间) - 其他?

我正在使用JDBC,但我想使用大多数数据库支持的东西(oracle,mysql,postgresql,derby,HSQL,H2等......)

感谢。

5 个答案:

答案 0 :(得分:3)

真的需要支持这六个数据库吗? (提示:不。

我认为编写普遍可移植的SQL DDL并不值得。 YAGNI

您应该支持当前使用的数据库,并准备好适应您将来采用的数据库。


重新评论:唯一标准的SQL可变长度数据类型是VARCHARBLOBVARCHAR用于字符串数据,其声明包括字符集和排序规则。 BLOB用于二进制数据,不支持字符集/整理。

其他数据类型(例如VARCHAR(max)CLOBTEXT)是供应商扩展程序:

答案 1 :(得分:3)

  

一个非常大的varchar(效率低,可能浪费磁盘空间)

这将是最便携的选择。将自己限制为2000个字符,对大多数数据库你应该没问题(oracle是当前的2000限制器,但也要警惕旧的 mysql版本)。我也不会太担心磁盘空间。大多数数据库仅将磁盘用于现场保存的实际数据。

答案 2 :(得分:1)

使用BLOB。 JDBC2.0 API支持它,因此任何支持JDBC2.0(J2SE 5.0)的驱动程序都应该支持它 BLOB的优点是:
1.规模可以大到4G-1(甲骨文。其他数据库不太确定)
2.可以存储您想要的任何数据(甚至图像序列化到您的JSON结构中的某个字段)
3.完全中立以跨OS运输 4.您仍然可以利用引用BLOB的键上的索引,以便搜索ids等,不必通过获取结构来完成。

答案 3 :(得分:0)

使用像hibernate这样的框架,因此找不到通用解决方案就没有问题了。我不认为你可以在每个提到的数据库中使用一种通用类型。我想,数据库差异很大。

答案 4 :(得分:0)

text is perhaps best但是很快就会从SQL Server中删除,而所有所列的没有 DBMS独立选项。

当谈到SQL时,可移植性被高估了。在更改DBMS之前,您更有可能更改客户端代码。选择一个并继续......