【问题标题】:Postgres UTF-8 clobs with JDBC带有 JDBC 的 Postgres UTF-8 clob
【发布时间】:2011-06-29 23:06:07
【问题描述】:

Postgres JDBC 驱动程序似乎无法正确处理 UTF-8 clob。当您检索 clob 时,字符不正确(您得到 ? 非 ascii 字符的标记)。

据说这是一个已知问题:

幸运的是,对于我的应用程序,我通常会避免使用 clob,所以我刚刚制作的 clob 字段变成了非常大的 varchars。

其他人如何处理这个限制?

【问题讨论】:

  • 我敢打赌,这些字符一开始就没有正确进入数据库。我对 UTF-8 字符和 JDBC 驱动程序没有任何问题。但是你认为 Postgres 中的“CLOB”是什么肯定会很有趣。尤其是当您将其转换为 varchar
  • @a_horse_with_no_name 它不是我认为 postgres 中的 clob 它是 hibernate 认为它应该是的 :)
  • 啊,又是可怕的 Hibernate 东西。
  • 这些字段在进入数据库之前在调试器中看起来很好,然后当它们回来时 nbsp (U+00A0) 变成 >。
  • 根本原因是 [lob 对象似乎使用 jdbc 驱动程序存储在 ascii 中]。 [lob 对象似乎使用 jdbc 驱动程序存储在 ascii 中]:stackoverflow.com/questions/9993701

标签: java postgresql jdbc utf-8 clob


【解决方案1】:

在 hibernate 的 clob 描述中添加 @Type(type="org.hibernate.type.StringClobType") 为我解决了这个问题。

【讨论】:

  • 我试图只保留 JPA 而不是任何 Hibernate 细节 +1。
  • 通常我使用注释 @Type(type = "org.hibernate.type.TextType") 但在将我的应用程序与 Oracle 作为数据库部署时遇到了问题。但是,@Type(type="org.hibernate.type.StringClobType") 适用于 Oracle 和 Postgres。谢谢。
【解决方案2】:

咕噜咕噜?你的意思是textvarchar,PostgreSQL 没有 clob 数据类型。 PostgreSQL JDBC 驱动程序对此没有问题,如果没有 UTF8 支持,它将毫无用处。在这里可以正常工作。

【讨论】:

  • 当我说 clob 时,我的意思是“文本”,因为这是 Hibernate/JPA 为 @Lob 字段创建的列。 Clob 是 JDBC 所称的 Postgres 文本字段。
  • 如果使用 Hibernate,您将字段注释为什么?
  • 我们使用的是 Hibernate 和 utf8。这一切都很默认,没什么特别的。 Java程序员做了原始配置,我无法帮助您进行注释。对不起
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 2015-12-15
  • 2015-01-15
  • 2018-05-02
相关资源
最近更新 更多