【问题标题】:SQL Server generated "Text File" data importing in to postgressql using copy commandSQL Server 使用复制命令生成“文本文件”数据导入 postgresql
【发布时间】:2011-02-12 04:27:28
【问题描述】:

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

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

谁能告诉我我需要做什么才能将数据从 SQL Server 2005 转移到 PostgreSQL?

【问题讨论】:

  • 什么类型的列中有nul字节? SQLServer 转储文本文件的编码是什么?你能明确告诉它使用 UTF-8 吗?
  • SQLServer 以字符编码转储文本文件,我不确定 UTF-8 的显式使用和字符变化列中包含 nul 字节
  • 听起来你有编码问题,我猜 SQLServer 正在使用 Windows-1252(查看 0xff 字符之一,如果它是“ÿ”,那么你有 Windows-1252)但是您需要 UTF-8 格式的字符数据。我不是 Windows 人,所以我不确定您将如何修复编码,但这不会是一个不常见的问题,所以希望有人会知道该怎么做。
  • 感谢 mu 的反馈和宝贵的时间有没有人帮忙

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


【解决方案1】:

我遇到了完全相同的情况(除了 SQL Server 2008 而不是 2005)。当我使用“SQL Server 导入和导出向导”导出文件并选择平面文件作为目标时,“代码页”参数默认为“1252 (ANSI - Latin I)”。 因此,在 postgreSQL 中运行复制命令时,我使用了set client_encoding to 'LATIN1'; copy tablename FROM 'path/to/file.csv' DELIMITERS '|' CSV; - 它成功执行。

【讨论】:

    【解决方案2】:

    如果文件确实是 Windows-1252 编码,那么您可以在运行复制命令之前使用set client_encoding=windows_1252 切换编码。

    查看手册以获取可用编码列表:
    http://www.postgresql.org/docs/9.0/static/multibyte.html

    【讨论】:

    • 嗨,谢谢你的回复,但是我不确定文件是 windows-1252 还是其他东西,你知道如何找到它
    【解决方案3】:

    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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      相关资源
      最近更新 更多