[pgsql-jp: 31076] SJISデータ

荻原 宣之 ogihara @ itup.co.jp
2003年 9月 17日 (水) 12:47:58 JST


こんにちは
荻原と申します。

ASP+PostgreSQLの環境で困っております。
現在、WebサーバとDBサーバの2台構成でODBCを使用して
連携しています。
PostgreSQLのデータベースではエンコードをEUC_JPにして、
データをSJISのまま登録しています。
そのデータに都道府県名が入っているデータがあるのですが、
都道府県名を検索条件にすると、下記のように意図しない
データが抽出されることがあります。

■正しく抽出される場合
[クエリ]
SELECT * FROM hoge WHERE (pref = '青森県')
[結果]
perf |city   |flg
―――+―――――+――
青森県|青森市  |1
青森県|青森市荒川|2
青森県|弘前市  |2
青森県|八戸市  |1
  ・
  ・
  ・

■正しく抽出されない場合
[クエリ]
SELECT * FROM hoge WHERE (pref = '岩手県')
[結果]
perf |city    |flg
―――+――――――+――
北海道|札幌市中央区|1
北海道|札幌市北区 |1
  ・
  ・
  ・
岩手県|盛岡市   |1
岩手県|盛岡市上米内|2
  ・
  ・
  ・
沖縄県|那覇市   |2
岩手県|石川市   |1
  ・
  ・
  ・

このように「青森県」で検索するときちんと青森県のみ抽出
されるのですが、「岩手県」や「大阪府」や「沖縄県」など
一部の県では他の県も抽出されてしまいます。
それも、正しく抽出されないデータの場合、どの県で検索
しても件数は全て同じになっています。
このクエリはASPから実行しても、PostgreSQLから直接実行
しても同じ結果だったので、PostgreSQL自体の問題のように
思います。

しかし、上記の正しく抽出されないクエリを下記のように変更
すると正しく抽出されます。

■変更前
SELECT * FROM hoge WHERE (pref = '岩手県')

■変更後
SELECT * FROM hoge WHERE (pref LIKE '岩手県')

このようにWHERE句を「=」から「LIKE」にしてみると正しく
抽出されます。
「LIKE」でもワイルドカードを使用していないので「=」と同じ
だと思うのですが、なぜこのようなことになるのか分かりません。
以前も同じようにSJISで登録してやったことがありますが、
その時はこのようなことにはなりませんでした。

申し訳ございませんが、何かお気づきになられた方や、
おわかりの方がおられましたら、お答えいただけないでしょうか。


下記は、サーバ情報です。

■Webサーバ
OS:Windws 2000 Server SP 4
ASPのバージョン:3.0
ODBCドライバ:PostgreSQL ODBC Driver 7.01.00.06
 ※Office NamiさんのHPにあるpsqlodbc.exeからインストール

■DBサーバ
OS:Red Hat Linux release 9
PostgreSQLのバージョン:7.3.4
使用DBのエンコード:EUC_JP
 ※登録しているデータはSJISデータ


以上、何卒宜しくお願い致します。




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