【问题标题】:columnDefinition = "TEXT" for all types of databasescolumnDefinition = "TEXT" 适用于所有类型的数据库
【发布时间】:2013-02-14 15:58:43
【问题描述】:

本地我用mysql,所以我用的时候

 @Column(columnDefinition = "TEXT")

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

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

【问题讨论】:

    标签: java jpa


    【解决方案1】:

    这样的事情怎么样:

    @Lob
    private String someString;
    

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

    【讨论】:

    【解决方案2】:

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

    我认为解决方案取决于字符串的字节大小。如果它

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

    • 在 oracle Oracle 8 到 Oracle 11g 中,类型 VARCHAR2 最大大小为 4000(A4 页面格式)
    • 在 DB2 10 for z/OS 中,类型 VARCHAR 的最大大小为 32704
    • 在 SQL Server 2012 中,类型 TEXT 的最大大小为 2,147,483,647 字节

    【讨论】:

    • @Lob 那时为我工作,但我会在以后的项目中检查你的想法,谢谢回答
    【解决方案3】:

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

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

    参数为jdbcCompliantTruncation=false

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

    【讨论】:

      【解决方案4】:

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

      只是我变了

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

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

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-17
        • 2019-05-10
        • 2010-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多