web-dev-qa-db-ja.com

PostgreSQL:エンコード「UTF8」のバイトシーケンス0xc2 0x81の文字は、エンコード「WIN1252」に相当するものがありません

そのテーブルの特定の行に対してSELECTクエリを実行中に以下の例外を取得する

ERROR:  character with byte sequence 0xc2 0x81 in encoding "UTF8" has no equivalent in encoding "WIN1252"

その行のcolumnの1つには、UTF-8でエンコードされて挿入された日本語の文字が含まれています。

この問題の修正はありますか?

7
Raamesh Keerthi

データベースで使用されているエンコーディングを知っておく必要があります。

SHOW server_encoding;

データベースに接続するときに、クライアントが使用するエンコーディングを指定できます。

SET client_encoding TO 'UTF8';

サーバーとクライアントのエンコーディングが異なる場合、データベースドライバはこれら2つのエンコーディング間で変換を試みます。同等の文字が見つからない場合、エラーがスローされます。

したがって、サーバーエンコーディングとクライアントエンコーディングは、あなたのような問題を回避するために同じである必要があります。

問題を解決するには:

  • データベースに接続します
  • client_encodingをUTF8に設定します
  • 行を日本語の文字で更新する

今後この問題を回避するには、データベースに接続するときにclient_encodingを適切な値に設定することを忘れないでください。

サポートされている文字セット のドキュメントを確認してください。

14
Adam

ここ を参照してください

このエラーが発生しました。「エラー:エンコード「UTF8」のバイトシーケンス<...>の文字は、エンコード「WIN1252」に相当するものがありません。」 MySQLWorkbenchを使用してデータをPostgreSQLからMySQLに移行している間。ターゲットのMySQLデータベースにUTF8エンコーディングがあり、すべてをそれにマップできると思ったため、なぜこれが発生したのかわかりませんでした。

この問題の本当の根本原因は、ソースDBに接続するために使用し、Workbenchで指定したPostgreSQL ODBC Driver(ANSI)であり、次のように変更した後のPostgreSQLドライバーであることが判明しました。 PostgreSQL ODBCドライバー(UNICODE)すべてが正常に機能しました。

4
Jake

Crystal Reportsがフィールドで次の文字セットを確認すると、エラーが発生しました:[18/03/2019 2:20 PM]

結局、私はそのフィールドの内容を変更しただけですが、適切なPostgreSQL ODBC UTF8用に設計されたドライバーが見つからない限り、この問題は数週間ごとにポップアップするでしょう。データクレンジングが必要です。

0
Chillywinter

それはクリスタルレポートで私と一緒に起こりました...

エラーを生成していたビューの列の内容を変更しました...

文字「0xc20x81」が「chr(128)」と等しいことを発見しました http://lwp.interglacial.com/appf_01.htm -したがって、この文字を次のように置き換えました:( replace((mi.complemento):: text、chr(128)、 'C' :: text))::文字変化(400)AS補完

乾杯!