【问题标题】:Error while importing some PostgreSQL data via PHP通过 PHP 导入一些 PostgreSQL 数据时出错
【发布时间】:2011-07-20 14:34:38
【问题描述】:

我正在尝试将一些数据从 PostgreSQL 数据库中的一组表中导入到另一个 PostgreSQL 数据库中的另一组表中。对于导入,我使用 PHP,因为我需要在将其插入新数据库之前进行一些数据操作。

一切正常,直到某些包含单引号的文本。在插入数据之前,我尝试转义这些引号,但出现此错误:

错误:编码“UTF8”的字节序列无效:0x96 提示:这 如果字节序列与编码不匹配,也会发生错误 服务器期望的,由“client_encoding”控制。

旧数据库的编码是 SQL_ASCII,而新数据库的编码是 UTF8。

我该如何解决这个问题?

【问题讨论】:

  • 您可以发布查询/数据吗?也许可以选择转换为不同的数据类型

标签: php postgresql


【解决方案1】:

您的旧数据库中可能有一些 Windows-1252 编码的文本(0x96 在该编码中编码 EN DASH)。

当服务器编码为SQL_ASCII时,PostgreSQL不进行编码转换或验证;它只是存储和检索您提供的文本。如果您的旧数据库使用了UTF8,那么您就不会遇到这个问题。本来应该的。

很有可能您的所有文本都在WIN1252 中,但也有可能是混合编码。最简单的做法是假设前者并在迁移脚本中将客户端编码设置为 WIN1252

pg_set_client_encoding($new_database, 'WIN1252');

在与 数据库的连接上设置此项很重要。它告诉 Postgres Windows 1252 编码的文本正在输入,Postgres 需要将其转换为 UTF-8。

请注意,如果旧数据库中有任何 UTF-8 编码的文本,如果您这样做,它将引发错误或变为 mojibake

【讨论】:

    【解决方案2】:

    插入数据库时​​使用pg_escape_string()

    【讨论】:

      猜你喜欢
      • 2012-08-10
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多