编码“UTF8”的字符0xe28093在“LATIN1”中没有等效字符

时间:2012-04-09 21:17:38

标签: postgresql grails encoding character-encoding

在Latin1 Postgres 9.1.3中插入一些数据时,我收到错误:

character 0xe28093 of encoding "UTF8" has no equivalent in "LATIN1"

Grails应用程序正在插入数据。我尝试过以下但没有成功

  • hibernate { connection.characterEncoding='utf8'}
  • jdbc conn string 中的
  • ?charSet=LATIN1
  • hibernate { connection.charSet='LATIN1'}

数据库是用:

创建的
CREATE DATABASE mydb
  WITH OWNER = postgres
       ENCODING = 'LATIN1'
       TABLESPACE = pg_default
       LC_COLLATE = 'C'
       LC_CTYPE = 'C'
       CONNECTION LIMIT = -1;

有什么想法吗?提前谢谢。

2 个答案:

答案 0 :(得分:4)

如果我理解正确,您的数据库是使用编码“LATIN1”创建的。创建DB后,无法更改此编码。您可以更改的唯一内容 - 如您的要点所示 - 是您的客户端与PostgreSQL 服务器之间的编码。 PostgreSQL服务器然后尝试在客户端编码和数据库编码之间进行转换。

如果客户端发送无法转换为DB编码的数据,则此过程当然会失败。在您的情况下,Unicode codepoint 2013无法转换为LATIN1。

这意味着您必须清除所有进入数据库的数据。摆弄客户端编码无济于事。

答案 1 :(得分:3)

这是en dash symbol的UTF-8编码。 latin1字符集中最接近的等价物是字符代码150(0x96)。