$Id$ PostgreSQL JDBC ドライバ 文字エンコーディングパッチ データベースの文字エンコーディングを Java 環境でのデフォルト 文字エンコーディングと区別して扱うようにするパッチです。 PostgreSQL 6.5.2 付属の JDBC ドライバはデータベースバックエンドと やりとりするデータの 文字(String)<->バイト列(byte[]) 変換に 文字エンコーディング指定をしていないため、Java 環境のデフォルト 文字エンコーディングがそのまま使用されます。両者が異なる場合や、 ネットワーク越しに JDBC ドライバを取得する等 Java 側に特定の 文字エンコーディングを仮定できない場合などには区別した扱いが必要です。 使い方 ドライバとして、"postgresql.Driver" でなく、"postgresql.ce.Driver" を 使って下さい。 "postgresql.Driver" を指定すると、オリジナルと同じ動作になります。 (なるはずです。) データベースの文字エンコーディングは接続時にドライバ内部で SQL によってデータベースバックエンドから取得しています。 なんらかの理由で明示的に指定したい場合は URL に下記のように 追加すると、こちらを優先するようにしてあります。 jdbc:postgresql://pghost/database&charactorEncoding=EUC_JP ^^^^^^^^^^^^^^^^^^^^^^^^^ 使用できる文字エンコーディング名について Java が内部に持つ文字エンコーディング変換機構を利用しているので、 Java の文字エンコーディング名が使用できます。MULE_INTERNAL は 使用できません。 PostgreSQL での文字エンコーディング名は、 postgresql/ce/PgCharactorEncoding.java のテーブルにあるものについては Java の文字エンコーディング名にマッピングするようになっています。 注意点 "postgresql.ce.Driver" だけでなく、"postgresql.Driver" も Class.forName() 等でロードすると、両方のドライバがドライバマネージャに 登録されてしまいます。扱うサブプロトコルが同じため、PostgreSQL 用の URL で両方のドライバが有効になるので、文字エンコーディングを 区別しないドライバが動作する可能性があります。 呼び名の変更 マルチバイトが扱えないのを扱えるようにしたわけでもないので、 MB という名称はやめました。 旧いパッチとの互換性 "postgresql.ce.compat.Driver" を使うと、6.4 までの指定方法で 使用できます。Java のシステムプロパティ "postgresql.databaseencoding" と、 URL "jdbc:postgresql.EUC_JP://pghost/database" の形式で 文字エンコーディングを指定できます。 ただし、今後は廃止するかも知れませんので、できれば使用を避けて下さい。 履歴 ・1999 11/8 6.5.2 対応 サブクラス化 URL の一部に符号化した指定ができるようにした 唐沢@名古屋市大 さんのバグレポートのパッチ(2/20)取り込み ・1998 12/14 6.4 対応、URL 指定できるように変更 ・1998 9/30 たかばとしはる さんが pgsql-jp メーリングリストで 6.3 用に「jdbc UTF8 patch」 http://www.sra.co.jp/people/t-ishii/postgres95/mhonarc/pgsql-jp/1998Mar/msg00185.html [pgsql-jp 3617] として公開されたものを他のエンコーディングでも利用できるよう修正 このパッチの扱いについて このパッチは、無保証です。このパッチによってなんらかの損害が発生する 可能性がありますので、自らの責任において使用して下さい。 再配布は自由に行ってもらって結構です。ただし、修正されたものを 配布される場合は、その旨を明記して下さい。 関連 このパッチ用のページ http://www.yo.rim.or.jp/~mochid/postgresql-jdbc/ PostgreSQL ML http://www.sra.co.jp/people/t-ishii/postgres95/ML/info.html 持田 修司 mochid@yo.rim.or.jp # End of file