11

在本地我使用mysql,所以当我使用

 @Column(columnDefinition = "TEXT")

不幸的是,应用程序也必须在不同的数据库上运行,我还没有被告知哪些只是“根本”。

是否可以制作具有类似效果但适用于大多数数据库的东西?我怎样才能实现它?

4

4 回答 4

17

像这样的东西怎么样:

@Lob
private String someString;

我认为它更便携,应该有效地生成 TEXT 或 LONGTEXT 数据类型。

于 2013-02-28T13:32:40.553 回答
2

如果您使用@LOB,您将遇到包含 DISTINCT 的 SQL 的 ORA-00932 异常(http://ora-00932.ora-code.com/

我认为解决方案取决于字符串的字节大小。如果它 < 4000 字节,您可以尝试使用 @Column(name = "...", length = 4000)

出于数据库兼容性的原因,我建议使用 4000 字节:

  • 在 oracle Oracle 8 到 Oracle 11g 中,类型 VARCHAR2 最大大小为 4000(A4 页面格式)
  • 在 DB2 10 for z/OS 中,类型 VARCHAR 的最大大小为 32704
  • 在 SQL Server 2012 中,类型 TEXT 最大大小为 2,147,483,647 字节
于 2013-08-13T10:37:35.947 回答
0

我遇到了同样的问题,仅在 application.properties 上向 MySQL Url 添加一个参数即可解决:

spring.datasource.url=jdbc:mysql://localhost:3306/database?jdbcCompliantTruncation=false

参数为 jdbcCompliantTruncation=false

看起来像一个解决方法,但只有它有效......

于 2019-12-09T08:13:22.267 回答
0

类似的问题 我在将图像上传到 mysql 数据库时遇到错误,@Column(columnDefinition = “TEXT”)。
您可以在 postgresql 和 mysql 数据库中使用。

只是我已经改为

@Lob
@Column(name=imageFiie)
private String image;

注意: 使用 PostgresSQL 时,我们可能需要定期存储任意长度的字符串。

为此,PostgreSQL 提供了三种字符类型:

  1. 字符(n)
  2. VARCHAR(n)
  3. 文本。不幸的是,TEXT 类型不是 SQL 标准管理的类型的一部分。这意味着如果我们想在我们的持久化实体中使用 JPA 注释,我们可能会遇到问题。

这是因为 JPA 规范使用了 SQL 标准。因此,它没有定义一种简单的方法来处理这种类型的对象,例如使用 @Text 注释。

幸运的是,我们有几种方法可以管理 PostgreSQL 数据库的 TEXT 数据类型:

我们可以使用@Lob注解或者,我们也可以使用@Column注解,结合columnDefinition属性

于 2020-10-10T20:02:42.437 回答