[pgsql-jp: 25382] Re: Access2000->ODBC->Postgres7.13 接続での不具合

Eiji Tokuya e-tokuya @ sankyo-unyu.jp
2002年 3月 22日 (金) 18:41:30 JST


徳家です。

> >日本語版ODBCを使っていたということは、どこかしら文字化けを起こして
> >ODBCから、データの編集が出来なってしまうのは仕方の無いことですよ。
>
> これまでは、データの読み込みだけでODBCを利用していました。
> 最近になって、データ更新もODBC経由で行おうと考えテストをしておりまし
> たら、この様な事態になってしまいました。
> 基本的には、PHPのスクリプトから書き出されるデータですので、ODBCが
> データを異常にしているとは、考えていませんでした。

読み出しだけでは、データは変更されませんよ。

それはいいとして、UnicodeのDBじゃないのですか?
よくメールを読んでいなくてコメントしてました。ごめんなさい。(^^;)

# 一つのDBに指定できるServerEncodingは一つです。
# ClientEncodingもServerEncodingとの変換が対応している
# エンコーディングでないと利用できません。
# よって、多か国語のDBを作る場合create databaseでエンコーディング
# をUNICODEかMULE_INTERNALでなくてはなりません。
# ODBCやPHPはMULE_INTERNALは対応していないので、
# 選択肢はUNICODE(UTF-8)しかありません。
# 日本語ODBCをUNICODEのDBに対して使いたい場合は
# SET CLIENT_ENCODING TO 'EUC_JP';
# である程度使えなくもないのですが、ドライバとバックエンドの変換
# マッピングか異なるので、多少不具合がおこると予測されます。
# このように設定して利用しているのかなと思ってました。

本題に戻ります。
そもそものこの「データの更新ができない」という原因は、EUC_JPと
欧米系エンコーディングの0x80以上のコードの文字を登録し、ODBC
でSJISとして編集しているからです。

ODBCでUPDATEを発行する場合primary key以外の文字列もwhereで
抽出条件として扱われています。この条件が文字化けした文字列になっ
ているので、データの更新が出来ないのです。
エンコーディングを正しく理解していれば、EUC_JPのDBに海外の0x80
以上のコードの文字は使わないと思いますが・・・・・。

マルチリンガルなDBにするのでしたら、早いうちにDBをUnicodeにした
ものにすることをすすめますよ。

徳家




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