[pgsql-jp: 26959] Re: 日本語文字化けについて

rio-t @ presen.to rio-t @ presen.to
2002年 8月 9日 (金) 02:00:27 JST


こんにちは、高石です。

From: "bankeumryang" <bankr @ starweb.ne.jp>
Subject: [pgsql-jp: 26955] Re: 日本語文字化けについて

> > 1.initdb -E EUC_JP を実行
> この部分はただinitdbだけ実行したんですがデータベース作成後文字環境をEUC_JPに
> してあげたんですがためですか?必ず1番のようにしなければいけないでしょうか?

psql -l

として、Encoding が EUC_JP と表示されれば DB の方のエンコー
ディングは問題ありません。
もしここで SQL_ASCII などと表示されるようなら、

createdb -E EUC_JP dbname

のように、DB 作成時にエンコーディングを指定して作成する必要
があります。
# initdb -E EUC_JP としてあれば、createdb で エンコーディン
# グを指定しなかった時に標準で EUC_JP となります。

ですが、おそらく問題があるのは DB のエンコーディングではなく
クライアント側のエンコーディングの設定でしょう。

psqlで、

show client_encoding;

としてみて下さい。

NOTICE:  Current client encoding is 'EUC_JP'

と表示されませんか?
この場合、そのpsql上から、SQLを発行して日本語をインサートし
た場合、入力された文字列が EUC_JP であるものとして扱われます。
また、同じくそのpsql上で select してレコードを表示した場合に
出力される文字列も EUC_JP で返ってきます。

# 例えば、client_encoding が SJIS だった場合、文字列をインサー
# トした時に、SJIS -> EUC_JP の変換が自動的に行われて DB に
# 格納され、select した時には、EUC_JP -> SJIS の変換が自動的
# に行われてから出力されます。

Ret HatのマシンからpsqlでSQLを発行した場合に文字化けしなかっ
たというのは、Red Hat(というかLinux)では日本語は普通 EUC_JP
を使うので、たまたまそれが client_encoding の設定と一致して
いたということでしょう。

解決方法としては、文字化けするクライアントで使用する文字コー
ドを client_encoding に合わせてやるか、あるいは逆に、使う文
字コードに合わせて client_encoding を設定してやる必要があり
ます。

具体的な方法については、私はJDBCを使っていないので、詳しいこ
とはわかりませんが、JDBC client_encoding postgresql あたりを
キーワードに検索してみれば、いろいろみつかるでしょう。
あと、http://java-house.jp/ml/topics/ の「JDBC」の項目も参考
になるかもしれません。
/--------------------------------------------------------/
  高石 勇人 < rio-t @ presen.to >
  PGP Key(RSA): http://rio-t.presen.to/pgp/mykey.asc
         (DSS): http://rio-t.presen.to/pgp/mykey-dss.asc
/--------------------------------------------------------/



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