[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 メーリングリストの案内