[pgsql-jp: 25220] Re: Windows上JDBC でのエンコーディング

Ryouichi Matsuda r-matuda @ sra.co.jp
2002年 3月 11日 (月) 17:18:30 JST


松田亮一です。

On Mon, 11 Mar 2002 01:59:01 +0900, YTP wrote:
> Postgreが提供するJDBCの内部でのデコードは、
> プラットフォームに合わせたデフォルトエンコーディングを使って
> 処理するようにはできないでしょうか、ということなんです。

PostgreSQL7.0のころのJDBCドライバは、そのように実装されていた
と記憶しています。

次の環境の場合:
  ・PostgreSQLのデータベースはEUC_JP
  ・LinuxからJDBCで接続(デフォルトエンコーディングはEUC_JP)
  ・WindowsからJDBCで接続(デフォルトエンコーディングはMS932)
Linuxは問題ありませんが、Windowsは文字エンコーディングの不一致
により、文字化けします。

上記環境に以下を追加した場合:
  ・環境変数PGCLIENTENCODINGにSJISを設定
Windowsは問題なくなりますが、逆にLinuxでは文字化けします。

このような問題があったので、PostgreSQL7.1のJDBCドライバからは、
Javaのデフォルトエンコーディングではなくて、データベースの文字
エンコーディングに合わせるように変更された、と思っております。

しかし、本当はデータベースの文字エンコーディングではなくて、環
境変数PGCLIENTENCODINGで指定される、通信に使用される文字エンコー
ディングに合わせた方が良かったと、私は思います。7.2のJDBCのソー
スを読むと、そのように変更されそうですね。

ちなみに、文字エンコーディングは手動で設定することも出来ます。

  conn = DriverManager.getConnection(
  "jdbc:postgresql://host/db?charSet=MS932",user,pass);


> (現状では、サーバ上のエンコーディング指定で決め打ちしている
> ように見え、結果的にSJISになってしまうと思います)

それは、環境変数PGCLIENTENCODINGにSJISを設定した場合の事です。
普通は設定しないと思っていたのですが、設定する人は多いのかな?
(日本語Windowsだけを考えるのなら、その設定は楽なんだけどね)


> >SJIS<->MS932のエンコーディングの微妙な違いは確かに随所で問題になっていま
> >すが、扱うエンコーディングがどちらかに決定していれば問題はないはずです。
> 
> これもおっしゃる通りです。
> プラットフォームのデフォルトエンコーディングに
> 決定していて欲しい、ということなんです。

同じデータベースに、WindowsとLinuxとSoralisとMacなどから同時に
接続するなんてのは普通にあるので、100% Pure Javaである同じJDBC
ドライバでは、それは無理ですよ。

___________________________________________________________
 Ryouichi Matsuda  (http://www.sra.co.jp/people/r-matuda/)




pgsql-jp メーリングリストの案内