SQL Server使用copy命令生成“Text File”数据导入postgresql

时间:2011-02-12 04:27:28

标签: sql-server postgresql utf-8 character-encoding

我有一个使用SQL Server 2005生成的文本文件。当我使用“copy”将文本文件导入我的一个PostgreSQL表时,它给出了以下错误:

  

错误:编码“UTF8”的字节序列无效:0xff

任何人都可以告诉我需要做什么从SQL Server 2005获取数据到PostgreSQL吗?

3 个答案:

答案 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)