Postgres JDBC驱动程序似乎无法正确处理UTF-8 clobs.当您检索clob时,字符不正确(您获得了非ascii字符的标记).
据说这是一个已知问题:
幸运的是,对于我的应用程序,我通常会避免使用clobs,所以我所做的字段就是真正的大变种.
其他人如何处理这种限制?
我们使用Hibernate作为JPA提供程序,我们有一个带有标记的大对象字段的类
@Lob
@Type( type = "org.hibernate.type.TextType" )
private String someString;
Run Code Online (Sandbox Code Playgroud)
该列创建为
SOMESTRING LONG()
Run Code Online (Sandbox Code Playgroud)
这与PostgreSQL和MySQL完美配合.使用Oracle时持久化对象
entityManager.persist( object );
Run Code Online (Sandbox Code Playgroud)
我们得到一个org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update例外.
删除@Type( type = "org.hibernate.type.TextType" )注释将解决Oracle的问题,但会引入PostgreSQL的编码问题,如使用Hibernate/PostgreSQL无法将Euro-sign存储到LOB字符串属性中所述
我想知道如何定义一个大文本字段,以便out程序可以在PostgreSQL和Oracle上运行.纯JPA解决方案是最佳的,但Hibernate特定的解决方案也是如此.
编辑:
真正的例外:
java.sql.BatchUpdateException: ORA-22295: cannot bind more than 4000 bytes data to LOB and LONG columns in 1 statement
Run Code Online (Sandbox Code Playgroud)
现在,我错过的例外解释了问题,实际上我持久化的对象比大字符串(至少一个长DBID)更多.