4

Postgres8.4.11データベースのエンコーディングとしてUTF8を使用しています。

CREATE DATABASE test
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = mydata
       LC_COLLATE = 'de_DE.UTF-8'
       LC_CTYPE = 'de_DE.UTF-8'
       CONNECTION LIMIT = -1;

ALTER DATABASE test SET default_tablespace='mydata';
ALTER DATABASE test SET temp_tablespaces=mydata;

そしての出力\l

 test | postgres  | UTF8     | de_DE.UTF-8 | de_DE.UTF-8 |

ドイツ語の文字を挿入しようとすると:

create table x(a text);

insert into x values('ä,ß,ö');
ERROR:  invalid byte sequence for encoding "UTF8": 0xe42cdf
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".

接続にpuTTYを使用しています。何か案が?

4

1 に答える 1

8

重要な要素はclient_encoding、サーバーがクライアントに期待するエンコーディングです。実際に送信されるものと一致する必要があります。あなたは何のために得show client_encodingますか?それUNICODEですか?

詳細については、マニュアルの「サーバーとクライアント間の自動文字セット変換」の章を参照してください。

クライアントとしてpsqlを使用している場合は、client_encodingで設定できます\encoding。ローカルシステムユーザーのエンコーディングを確認し(Linuxではlocaleシェルで入力)、client_encodingpsqlで一致を設定します。encodingシステムでPostgreSQLサーバーと同じロケールを使用すると、このような複雑さを回避できます。

puTTY (Windowsの場合)を使用する場合は、それに応じて「変換」を設定してください。[設定]:[ウィンドウ]-[翻訳]をご覧ください。一致する必要がありclient_encodingます。実行中のセッションを右クリックして、 [設定の変更]を選択できます。保存したセッションでこれらの設定を保存することもできます。

于 2012-07-11T10:45:30.087 に答える