[pgsql-jp: 34984] Re: PL/pgsql内での漢字

Tatsuo Ishii t-ishii @ sra.co.jp
2005年 3月 8日 (火) 22:19:12 JST


石井です.

> "nkf"を使ってsqlファイルをEUC_JPに文字コードを変換したファイルでFUNCTIONを作
> 成しても同じでしょうか?
> この方法で、set client_encoding to 'EUC_JP'としターミナルの
> 文字コードもEUC_JPにすると文字化けしてFUNCTIONがうまく実行できませんでした。
> set client_encoding to 'UTF-8'ではまずいのでしょうか?(Fedora1がUTF-8なの
> で)

漢字コードの問題ではないと思いますよ.

> 他の列名'hurigana'(カタカナ)、'ninusi_name'(漢字)、からの検索は
> うまくいくのですが、この辺りが納得がいかないところです。

jusyo alias for $6;
:
:
select * from ninusi_mastert where jusyo like ''%'' || jusyo ||

のように,列名とPL/pgSQLの変数名が同じになってしまっているのが原因です
ね.他の列名ではたまたま列名と変数名が同じでないので動いているのだと思
います.

PostgreSQLのSQLログを取ってみるとわかりますが,今の関数では,

select * from ninusi_mastert where  $1  like '%' ||  $2  || '%'

というSQLを実行することになってしまい,'jusyo' like '%jusyo%' が常に
trueになる結果,全件抽出してしまったんですね.

jusyo1 alias for $6;
:
:
select * from ninusi_mastert where jusyo like ''%'' || jusyo1 ||

のように,列名と変数名が同じにならないようにすればちゃんと動く関数にな
ると思います.

これでclient_encodingがUTF-8でも動くはずです.
--
Tatsuo Ishii



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