菊地です。

おそらく、文字コード変換が2箇所あることが混乱されているような気がします。
データベースサーバとそのクライアントプログラムの間の文字コードと、
クライアントプログラムが表示の時に使用される文字コードの設定と....

ikesan wrote:

> いけさん です。
> 
> On Sun, 27 Nov 2005 22:17:33 +0900
> "T.P.S.Nakagawa" <[EMAIL PROTECTED]> wrote:
> 
> 
>>  データベースそのものは、どういう charset で作成されているのですか?
> 
> 
>  DBはデータを透過的に格納します。
これは、正しいようですが、透過的になるのは正しい文字セットを使用したときでしょうか。
PostgreSQLでは、サーバーエンコーディングに何を使用するかによって変わってきます。
SQL_ASCIIでは全く変換されませんので、そのまま格納されると思われます。(おそらく)
その他のエンコーディングでは、自動的に変換がかかります。(PostgreSQLのコンパイル
オプションで変更可だが、バージョンによってはディフォルトの動作が違っている可能性あり)
自動変換については、組み合わせによって違うようなので、マニュアルを参照しましょう。


作成したときはどのようにしたのでしょうか。提示がありませんが..

1. initdb -E EUC_JP などのようにinitdbでやった。
2. createdb -E EUC_JP japanese などのようにやった。
3. CREATE DATABASE japanese WITH ENCODING 'EUC_JP'; のようにやった。
(4. その他 コンパイル時のディフォルトエンコーディング)

のいずれかだと思いますが、>psql -l の結果などがあると良いかもしれません。


> 
> 
>>>                環境         UTF-8                   EUC-JP
>>>                tool  PgAdmin3 OOo.Base psql  PgAdmin3 OOo.Base psql    
>>>  PostgreSQL
>>>  UNICODE              ok        ok      ok     ok       ok     文字化け
>>>  SQL_ASCII(EUC-JP)   文字化け 文字化け  --   文字化け 文字化け   ok
> 

考えられるのは、DBがunicode(UTF-8)の場合には、環境が何であろうと、DBサーバ
(postmaster)とクライアントプログラムの間ではUTF-8でしかデータの受け渡しは
されていないと思います。そして、PgAdmin3とOOo.Baseでは、内部コードもUnicodeという
点では正しく動作するでしょう。環境はそれぞれのクライアントが表示するために使用する
環境ですので、

unicode(UTF-8)を使用して、EUC_JPのpsqlが文字化けするのは、client_encoding設定が
正しくないか、設定していないということはないでしょうか?
もしそうなら、設定して試してみるのも一考かと思われます。

1. psqlで\encodingを使用する。ex) \encoding EUC_JP
2. SET CLINET_ENCODING TOを使用する ex) SET CLIENT_ENCODING TO 'EUC_JP'
3. 環境変数PGCLIENTENCODINGに文字セットを設定しておく。

としておかないと、psqlでは文字化けしてしまうと思います。

> 
>  EUC-JP 環境では SQL_ASCII で作成し、アプリからは EUC-JP のコードでデータ
>  を格納し、運用して来ています。
これは、”たまたま運良く”運用できていると思われます。
PostgreSQLのマニュアルには、7bit-ascii以外は、推奨しないとなっています。
全く変換しないので、SORTやLIKEなどは正しく動作していないように思われます。


>  テスト用に UTF-8 環境で作成したDBは UNICODE で作成し、 UTF-8 のコードで
>  データを格納しました。
>  もちろん SQL_ASCII で作成したDBに UTF-8 のデータを格納する事も可能です。
>  このばあいは EUC-JP 環境の psql で文字化けします。
>  PgAdmin3 等を使ってテストもしています。
可能かもしれませんが、sqlで操作(比較・ソートなど)は多分正しくできないと思います。

>>  データベースの charset 設定が EUC-JP でも、UTF-8 にして
>>表示してくれるということです。
> 
これは、PostgreSQLのマニュアルを参照しているのでしょうか?
SQL_ASCIIについては変換してはくれません。

>  
>  これについては
>  http://www.pgadmin.org/pgadmin3/faq/#EncodingProblem
>  ご覧になるといいでしょう。
この文書にもSQL_ASCIIは問題ありとなっているようですが?



メールによる返信