将编码LATIN1的Postgres COPY文件转换为编码为UTF的表

时间:2011-06-08 09:57:48

标签: sql postgresql encoding copy bulkinsert

批量插入时遇到问题。我正在尝试从编码LATIN1的文件批量插入到包含UTF8编码的数据库的表中。

invalid byte sequence for encoding "UTF8": 0xc33f 

当我执行SET CLIENT_ENCODING ='LATIN1'并从控制台执行COPY后,它可以正常工作。但是JDBC说我不能做SET CLIENT_ENCODING。

拜托,您能否建议解决我如何解决问题的方法。谢谢!

1 个答案:

答案 0 :(得分:4)

尝试将allowEncodingChanges连接参数设置为true以允许(暂时)将客户端编码更改为LATIN1。根据{{​​3}},PostgreSQL应该处理LATIN1(客户端)和UTF8(服务器)之间的自动字符集转换。

  

client_encoding设置由   司机,不应该改变。   如果驱动程序检测到更改,它将会   中止连接。 有一个   此行为的合法异常   但是,使用COPY命令   驻留在服务器上的文件   文件系统。唯一的手段   指定此文件的编码   是通过改变client_encoding   设置。

     

仅在您需要时启用此功能   在何时覆盖客户端编码   做副本。