2010-05-10 93 views
4

我从CSV文件导入数据。其中一个领域有口音(TelefónicaO2 UK Limited)。将数据插入表时,应用程序会抛出en错误。编码错误PostgreSQL 8.4

PGError: ERROR: invalid byte sequence for encoding "UTF8": 0xf36e6963 
HINT: This error can also happen if the byte sequence does not match the 
encoding expected by the server, which is controlled by "client_encoding". 
: INSERT INTO "companies" ("name", "validated") 
    VALUES(E'Telef?nica O2 UK Limited', 't') 

当我输入带重音和变音符号的名称时,通过表格输入的数据有效。 我该如何解决这个问题?

编辑

我通过转换文件的编码处理的问题。我将CSV文件上传到Google文档并将文件导出为CSV。

回答

6

错误消息非常明显:您的client_encoding设置设置为UTF8,并且您尝试插入未用UTF8编码的字符(如果它是来自MS Excel的CSV,则您的文件可能是在Windows-1252中编码的代替)。

您可以在应用程序中将其转换,也可以更改PostgreSQL连接以匹配要插入的编码(从而使PostgreSQL能够为您执行转换)。您可以通过在您的PostgreSQL连接上执行SET CLIENT_ENCODING TO 'WIN1252';来尝试插入该数据。导入后,应将其重置为其原始值RESET CLIENT_ENCODING;

HTH!

+0

+1 - 您也可以尝试手动将文件转换,例如使用的iconv。但给你一些时间来了解你在做什么;试验和错误在这里不起作用。 2010年的程序员必须了解Unicode和字符集编码的基础知识。 – leonbloy 2010-05-10 20:34:38

+0

这是文件编码问题。我将CSV文件上传到Google文档并再次导出文件。这解决了编码问题。 – 2010-05-10 21:39:45