通过PHP导入一些PostgreSQL数据时出错

时间:2011-07-20 14:34:38

标签: php postgresql

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

一切都没问题,直到有一些文字包含单引号。我试图在插入数据之前逃避这些引号,我得到了这个错误:

  

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

旧数据库上的编码是SQL_ASCII,而在新数据库上我有UTF8。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

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

当服务器编码为SQL_ASCII时,PostgreSQL不执行编码转换或验证;它只是存储和检索你给它的文本。如果您的旧数据库使用了UTF8,那么您就不会遇到此问题。希望能做到。

你的所有文字都在WIN1252中,这是一个很好的机会,但可能会有各种编码。最简单的方法是假设前者并在迁移脚本中将客户端编码设置为WIN1252

pg_set_client_encoding($new_database, 'WIN1252');

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

请注意,如果旧数据库中存在任何UTF-8编码的文本,则如果执行此操作,则会抛出错误或变为mojibake

答案 1 :(得分:0)

在数据库中插入时使用pg_escape_string()