[pgsql-jp: 34139] Re: 全角「1」を含む like 検索で意図しないレコードが返される

Katsuhiko Okano k_okano @ po.ntts.co.jp
2004年 10月 22日 (金) 20:42:29 JST


岡野と申します。

Hiroshi Nomiyama wrote:
> Where条件句に全角の「1」を指定したlike検索で、意図しないレコードを含む結果が返ります。
(略)
> と、「1」を含まない「藤栄」と連続しているレコードもSELECTされました。('%1%'の1は全角です)

initdbコマンドやcreatedbコマンドに「-E EUC_JP」と
エンコーディング名をEUC_JPに指定していませんか?
psql -l で該当するデータベースのEncodingを確認してみてはいかがでしょう。


以下はEUCだった場合の話です。

http://www.rtpro.yamaha.co.jp/RT/docs/misc/kanji-euc.html
によると、EUCではそれぞれ
「1」=A3B1
「藤」=C6A3
「栄」=B1C9
となるようです。したがって、
「藤栄」=C6A3B1C9
「*1*」=**A3B1**  (*は見やすくするための物なので意味はないです)
となるので一致してしまうのではないでしょうか?


対処方法の一つは、データベースのエンコーディングをUNICODEにしてしまう
方法だと思います。
(他の問題が表面化してしまうかもしれませんが・・・)
-- 
----------------------------------------
Katsuhiko Okano
k_okano (at) po.ntts.co.jp
NTT Software Corp. (division "NBRO-PT6")




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