columnDefinition = “TEXT” for all types of databases

前端 未结 4 1010
无人共我
无人共我 2021-02-20 03:53

Locally I use mysql, so when I use

 @Column(columnDefinition = \"TEXT\")

Unfortunately application have to run at different databases too, I\'

相关标签:
4条回答
  • 2021-02-20 04:41

    What about something like this:

    @Lob
    private String someString;
    

    I think it's more portable and should effectively generate TEXT or LONGTEXT data type.

    0 讨论(0)
  • 2021-02-20 04:43

    I had the same problem and it was resolved only adding a parameter to MySQL Url on application.properties:

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

    The parameter is jdbcCompliantTruncation=false

    Looks like a workaround but only it works...

    0 讨论(0)
  • 2021-02-20 04:45

    Similiar Problem I was getting error while uploading an image into the mysql database, @Column(columnDefinition = “TEXT”).
    You can use in postgresql as well as mysql database's.

    Just I've changed to

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

    Note: When working with PostgresSQL we may, periodically, need to store a string with an arbitrary length.

    For this, PostgreSQL provides three character types:

    1. CHAR(n)
    2. VARCHAR(n)
    3. TEXT. Unfortunately, the TEXT type is not part of the types that are managed by the SQL standard. This means that if we want to use JPA annotations in our persistence entities, we may have a problem.

    This is because the JPA specification makes use of the SQL standard. Consequently, it doesn't define a simple way to handle this type of object using, for example, a @Text annotation.

    Luckily, we have a couple of possibilities for managing the TEXT data type for a PostgreSQL database:

    We can use the @Lob annotation Alternatively, we can also use the @Column annotation, combined with the columnDefinition attribute

    0 讨论(0)
  • 2021-02-20 04:56

    If you use @LOB you'll have ORA-00932 exception with SQL containing DISTINCT (http://ora-00932.ora-code.com/)

    I think that the solution depends on the bytes size of your string. If its < 4000 bytes, you can try using @Column(name = "...", length = 4000)

    I suggest 4000 bytes for DB comptibility reason :

    • In oracle Oracle 8 to Oracle 11g, type VARCHAR2 max size is 4000 (A4 page format)
    • In DB2 10 for z/OS, type VARCHAR max size is 32704
    • In SQL Server 2012, type TEXT max size is 2,147,483,647 bytes
    0 讨论(0)
提交回复
热议问题