我有一个使用SQL Server 2005生成的文本文件。当我使用“copy”将文本文件导入我的一个PostgreSQL表时,它给出了以下错误:
错误:编码“UTF8”的字节序列无效:0xff
任何人都可以告诉我需要做什么从SQL Server 2005获取数据到PostgreSQL吗?
答案 0 :(得分:4)
我的情况完全相同(除了SQL Server 2008而不是2005)。当我使用“SQL Server导入和导出向导”导出文件并选择“平面文件”作为目标时,“代码页”参数默认为“1252(ANSI - Latin I)”。
因此,当在postgreSQL中运行copy命令时,我使用set client_encoding to 'LATIN1';
copy tablename FROM 'path/to/file.csv' DELIMITERS '|' CSV;
- 并且它已成功执行。
答案 1 :(得分:1)
如果文件在Windows-1252编码中不受限制,则可以在运行复制命令之前使用set client_encoding=windows_1252
切换编码。
查看手册以获取可用编码列表:
http://www.postgresql.org/docs/9.0/static/multibyte.html
答案 2 :(得分:1)
SQL Server文本输出(BCP文件?)过去曾被写为UTF-16,这是PostgreSQL不支持的Unicode编码。 UTF-16文件以0xff 0xfe(或0xfe 0xff)开头,因此这是首先获得有关该特定字节值的投诉的原因之一。
在Linux或类似网站上,我建议使用“recode”或“iconv”实用程序将UTF-16转换为UTF-8,这是PostgreSQL首选的全Unicode编码。在Windows上执行该任务的一个建议就是获取Windows版本的重新编码:UTF-16 to UTF-8 conversion (for scripting in Windows)