重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

Postgres8です。
データベースのエンコーディングは【SQL_ASCII】です。
LIKE検索をした場合のSJISの文字化けに対する対処方法を教えてください

あいまい検索をしたいのですが、
文字化け対象文字を含む場合、
どのように記述すればいいのですか?


select * from aaa where name = 'パソ\コン';
上記のように完全一致で検索をすると抽出できます。


select * from aaa where name like '%パソ%'
上記のよう指定してlike検索をしても抽出できます。


しかし以下の場合どちらでも抽出できません。
select * from aaa where name like '%パソコ%'
select * from aaa where name like '%パソ\コ%'

よろしくお願い致します。

A 回答 (2件)

> データベースのエンコーディングを【EUC_JP】に変更しないとだめでしょうか?



【SQL_ASCII】では、マルチバイト文字がマルチバイト文字として認識されないので、難しいと思います。
WHERE句などに日本語が有る場合、予期しない動作することもあるでしょう。

特にSJISを扱う場合は、エスケープ文字(5Ch)を含む文字の後ろに\を加えるなどの処置しないと、構文エラーを引き起こすこともあります。
例えば、下記の様なSQLの場合、構文エラーになってしまうと思います。

select * from aaa where name like '%パソ';


【SQL_ASCII】でないとだめということですが、どういった理由でしょうか?
【SQL_ASCII】のままで無理に日本語を扱う方法を探すよりは、【EUC_JP】もしくは【UNICODE】にする方法を考えたほうが良いかと思います。
    • good
    • 0

PostgreSQLでSJISを扱う場合は、まず、データベースのエンコーディングを【EUC_JP】にします。


その上で、アプリケーション側で、クライアントエンコーディングをSJISに設定すれば、PostgreSQLが自動的に文字セットを変換してくれます。
http://www.postgresql.jp/document/pg802doc/html/ …

このようにすると、データベースに格納される日本語の文字列はEUCですが、アプリケーション側で取出されるものはSJISになります。
お尋ねのあいまい検索も問題なく処理できます。

DB作成コマンド 例 ------------------------------------------------
createdb -E EUC_JP test_db
------------------------------------------------------------------

PHPアプリケーション 例 -------------------------------------------
$conn = pg_connect('host=localhost dbname=test_db user=test_user password=test_pw');
pg_set_client_encoding($conn, 'SJIS');
------------------------------------------------------------------

データベースのエンコーディングは、Unicodeでも良いと思います。

この回答への補足

データベースのエンコーディングを【EUC_JP】に変更しないとだめでしょうか?
事情がありまして、エンコーディングは【SQL_ASCII】で
ないとだめなのですが・・・。

補足日時:2005/05/16 12:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

今、見られている記事はコレ!