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