2011-07-20 6 views
1

別のPostgreSQLデータベースの別のテーブルにあるPostgreSQLデータベースのテーブルからいくつかのデータをインポートしようとしています。インポートのために私は新しいデータベースにそれを挿入する前にいくつかのデータ操作を行う必要があるので私はPHPを使用します。PHP経由でいくつかのPostgreSQLデータをインポート中にエラーが発生しました

一重引用符を含むテキストがあるところまで、すべての点で問題はありませんでした。私は、データを挿入する前に、それらの引用符をエスケープしようとしましたが、私はこのエラーを取得:

ERROR: invalid byte sequence for encoding "UTF8": 0x96 HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".

新しいデータベース上で、私はUTF8を持っていながら、古いデータベースのエンコードは、SQL_ASCIIです。

どうすればこの問題を解決できますか?

+0

質問/データを投稿できますか?他のデータ型へのキャストがオプションになる可能性があります –

答えて

1

を挿入するとき、それはあなたの古いデータベース(そのエンコーディングでは0x96エンコードEN DASH)で一部のWindows-1252でエンコードされたテキストを持っている可能性があります。

サーバのエンコーディングがSQL_ASCIIの場合、PostgreSQLはエンコーディングの変換や検証を行いません。それは単にあなたがそれを与えたときにテキストを格納し、検索します。あなたの古いデータベースが代わりにUTF8を使用した場合、この問題は発生しません。 woulda coulda shoulda。

すべてのテキストがWIN1252にあることはまともなことですが、エンコードが混在している可能性があります。一番簡単な方法は、前者を想定して、移行スクリプトでWIN1252にクライアントの符号化方式を設定します:

pg_set_client_encoding($new_database, 'WIN1252'); 

それはあなたが新しいデータベースへの接続にこれを設定することが重要です。 PostgresにWindows   1252でエンコードされたテキストが入ってきていると伝えているので、PostgresはそれをUTF-8に変換する必要があります。

古いデータベースにUTF-8エンコードされたテキストがある場合は、エラーをスローするか、これを行うとmojibakeになることに注意してください。

関連する問題