PostgreSQLデータベースには、「サーバーエンコーディング」というネイティブ文字タイプがあります。通常はutf-8です。
すべてのテキストはこのエンコーディングです。 bytea
として保存されている場合を除き、混合エンコーディングテキストはサポートされていません。 (つまり、不透明なバイトシーケンスとして)。
「unicode」または「non-unicode」文字列を格納することはできません。また、PostgreSQLには「varchar」と「nvarchar」の概念がありません。 utf-8では、7ビットASCII範囲(およびその他のいくつか)に該当する文字は1バイトとして格納され、文字が広いほどより多くのストレージが必要になるため、自動的に実行されます。 utf-8は、すべて「ワイド」文字であるテキストの場合、ucs-2またはutf-16よりも多くのストレージを必要としますが、混合されたテキストの場合は少なくなります。
PostgreSQLは、client_encoding
を使用して、クライアントのテキストエンコーディングとの間で自動的に変換します。 設定。明示的に変換する必要はありません。
クライアントが「Unicode」(Microsoft製品はUCS-2またはUTF-16を意味するときに言う傾向があります)の場合、ほとんどのクライアントドライバーがutf-8<->utf-16変換を処理します。
したがって、クライアントが正しい文字セットオプションを使用してI / Oを実行し、正しいclient_encoding
を設定している限り、気にする必要はありません。 これは、実際にネットワーク上で送信されるデータと一致します。 (これは、PgJDBC、nPgSQL、Unicode psqlODBCドライバーなどのほとんどのクライアントドライバーで自動的に行われます。)
参照: