[pgsql-jp: 29950] Re: 特定の日本語を含むとエラー
Tatsuo Ishii
t-ishii @ sra.co.jp
2003年 5月 18日 (日) 10:25:17 JST
石井です.
> > 以下のようなテーブルに、JDBC経由でアクセスすると
> > エラーを吐いて落ちてしまいます。
> >
> > [テーブル:キーワード]
> > create table keyword(
> > key_id integer,
> > keyword varchar(100),
> > kana varchar(100)
> > );
> >
> > insert into keyword values(
> > 1,'睡眠時無呼吸症','すいみんじむこきゅうしょう');
> >
> > select * from keyword
> > where keyword = '睡眠時無呼吸症' ;
> >
>
> 理由は良く分かりませんが、「睡眠時無呼吸症」
> という日本語をEUCに変換したところ、
> うまくいくようになりました。
> しかし、DBはNUICODEで作ってあるので、
> なぜこれでうまくいくのかかなり疑問です。
> (PGCLIENTENCODINGもUNICODEです)
>
> その後、新たな問題が起こりました。
> 同様に、'睡眠時無呼吸症' という単語を
> キーにして、以下のような正規表現で検索をしていた
> のですが、やはり「呼」の字があると
> 同様のエラーを吐いて落ちてしまいました。
> (PSQLからでも落ちます)
>
> select * from hoge where name ~ '睡眠時無呼吸症'
そりゃそうでしょう.テーブル名も列名も間違っていますから.
> こちらについては、LIKEにすることで
> 回避することができるのでいいのですが、
> 日本語を使った正規表現は、まだまだなのかな?
> と思いました。
ここ数年日本語正規表現に関する障害は見たことがありません.たまにバグレ
ポートが出てきますが,すべて使い方が悪かったのが原因です.
おそらくinitdbするときに --no-locale オプションを付けていないのじゃな
いですか?RedHat系は日本語のロケールデータベースが腐っているので,ロケー
ルサポートを有効にして日本語を使うとまずまともに動きません.
ちなみに,ここで提示されている例題はすべて私の環境ではまともに動きます.
(Vine Linux 2.1CR + PostgreSQL 7.3.2 + Unicode datatabase)
--
Tatsuo Ishii
pgsql-jp メーリングリストの案内