[pgsql-jp: 27823] Re: ODBC経由での日本語表示とCygwin上での日本語表示

rio-t @ presen.to rio-t @ presen.to
2002年 10月 29日 (火) 13:33:39 JST


こんにちは、高石です。

いずれ使うこともあるだろうと思ったので、この機会にODBCドライ
バを入れてみました。
# でもAccessはないのでクライアントソフトは別のもの。

それで試してみた結果わかったことを整理すると、

(1) ODBCドライバは環境変数などは見ていないようだ。
    (サーバ側のデフォルトのclient_encodingをそのまま使う)
(2) psqlは環境変数を見てclient_encodingの設定を変える
(3) PostgreSQLサーバも環境変数を見て、
    デフォルトのclient_encodingを変える。

ということのようです。
# あくまで試してみた結果からの推測なので間違っている可能性も
# あります。

混乱するのは、クライアントとサーバを同一マシンで動かしている
場合に、環境変数の設定がこの(2)と(3)両方に影響を及ぼすせいで
しょう。
つまり、ODBC経由での動作が変わるのは、環境変数を見ているので
はなく、サーバ側のデフォルト設定が変わってしまうため、結果的
にその影響をうけてしまうのだと思います。

というわけで、問題解決のためには、

・サーバ側のデフォルトのclient_encodingをEUC_JPから変えない
・psqlを起動する時の環境変数はPGCLIENTENCODING=SJIS

という2点さえ守ればよさそうです。

で、そのために一番簡単な方法は、

* Windowsの環境変数には何も設定せずに、Postmasterをサービス
  として起動。
* .bashrcには export PGCLIENTENCODING=SJIS と書いておく。

ことだと思います。私はこれでうまく動いています。

ようは、Postmasterを起動している環境のPGCLIENTENCODINGがSJIS
になっているとODBC経由で問題が生じるので、psqlとpostmasterは
別の環境変数の下で動かす必要があるわけです。

もしODBCドライバの設定でclient_encodingを変更できるなら、話
はもっと簡単だと思うのですが、残念ながら私には設定方法がわか
りませんでした。

postmasterをサービスとして起動しない場合、postmasterとpsqlの
起動環境を分けてやる必要があります。また、.bashrcで
PGCLIENTENCODINGの設定をしてしまうと、当然postmasterにも影響
を与えてしまうので、この環境変数の設定は、postmasterとは別の
コンソール上でだけ行う必要があります。
つまりはpsql起動前に手動で設定を行うということです。
しかしそれは面倒なので、aliasによる方法を提案したのですが、

From: "Chie.M" <gontakun @ check.ne.jp>
Subject: [pgsql-jp: 27820] Re: ODBC経由での日本語表示とCygwin上での日本語表示

> alias psql='PGCLIENTENCODING=SJIS;psql' を追加し
> alias で確認したところ、alias psql='PGCLIENTENCODING=SJIS;psql' 
> という表示が出るようになりました。
-snip-
> alias psql='PGCLIENTENCODING=SJIS;psql' は上記の通り
> 認識しているようですが、psqlを起動して確認すると、文字化けしたままに
> なっています。Access側では化けていません。

謎ですね。PGCLIENTENCODINGのつづりが微妙に違っているとか、そ
ういうことはありませんか?
psqlを起動したらshow client_encoding;で確認してみて下さい。
これがSJISになっていなければ、おそらくPGCLIENTENCODIGのつづ
り違いだと思います。

つづり違いでもないのにEUC_JPになる場合、一応
alias psql='export PGCLIENTENCODING=SJIS;psql'
というのも試してみて下さい。

もし、SJISになっていても文字化けするというなら、見ているデー
タそのものが異状である可能性があります。

あと、この時psqlを起動するのはpostmasterを起動したコンソール
とは別のCygwinコンソールを開いてやって下さい。

> さらに、export PGCLIENTENCODING=SJISを.bashrcに記述して起動した
> 状態で、Cygwinからデータを入力してみました。
> アルファベットだけの行はAccessから読み取れますが、一文字でも日本語が
> 入っていると、Accessから#Deletedになります。

ここの下の方に似たような(#Deletedになる)症状が書いてあります。
http://www.interwiz.koganei.tokyo.jp/software/PsqlODBC/faq.html
関係あるかどうかはわかりませんが、
/--------------------------------------------------------/
  高石 勇人 < 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 メーリングリストの案内