クエリーの検索が厳密過ぎる †
ページ | OpenOffice.org FAQの登録ページ |
---|---|
投稿者 | 匿名 |
分類 | |
優先順位 | |
状態 | |
カテゴリー | |
投稿日 | 2009-08-17 17:08:31 (月) |
OS | Windows XP |
依存するページ | |
バージョン |
メッセージ †
回答ページでは行末に「~」を付加する必要はありません |
クエリーで全て半角英字の大文字で入力しているものをパラメータクエリーで検索するときに小文字で入力してしまうと検索に引っ掛かってくれません。
Accessでは問題なく検索されていたので使い勝手が悪く思います。 もう少し柔軟な検索が出来る方法があれば教えていただきたいです。
よろしくお願いします。
データベースの仕様ですね †
M.Kamataki (2009-08-17 21:36:22 (月))
Accessでは、英字は大文字・小文字・全角・半角を区別しません。また、全角ひらがな・全角カタカナ・半角カタカナも区別しないようです。これは、mdbというファイル形式のデータベースの仕様です。クエリーの仕様ではありません。たぶんAccessで他のデータベース、たとえばPostgreSQLに接続してクエリーで検索してみると、後述するように全然異なる結果になるはずです。
一方、Baseが標準で利用するデータベースはHSQLDB(http://hsqldb.org/)です。このHSQLDBを使う限り、英字の大文字・小文字を区別します。これはHSQLDBというデータベースの仕様です(回避方法がありました)。したがって厳密なのはクエリーではなくデータベースです。
>もう少し柔軟な検索が出来る方法があれば教えていただきたいです。
このご質問に対しては、HSQLDB以外のデータベース、たとえばmdb形式のものを接続してお使いください、というのが回答になります。(HSQLDBでも可能)
タイトルを変えて、mdb、MySQL、PsotgreSQLの検索結果を紹介しますので、目的にあったデータベースを選んでください。
p.s. ()内は、「HSQLDBでの可能性」の記述に合わせて追記。
mdbの場合 †
M.Kamataki (2009-08-17 21:55:31 (月))
BaseでAccessのmdb形式のデータベースに接続し、以下のテーブルを作成しました。
以下のようにクエリーの検索は、英字の大文字・小文字・全角・半角を区別しません。ついでに全角ひらがな・全角カタカナ・半角カタカナも区別しません。このようにゆるいデータベースを使えば、ご希望のことが実現します。Microsoft系のSQL Serverでも英字の大文字・小文字は区別しないみたいですね。
MySQLの場合 †
M.Kamataki (2009-08-17 22:02:51 (月))
mdbと同じ内容のテーブルで以下のようにクエリーで検索すると、MySQLでは、英字の大文字・小文字は区別されません。
PostgreSQLの場合 †
M.Kamataki (2009-08-17 22:05:25 (月))
mdbと同じ内容のテーブルで以下のようにクエリーで検索すると、PostgreSQLでは、HSQLDBと同じ結果になりました。
英字の大文字・小文字を区別したい場合 †
M.Kamataki (2009-08-17 22:10:00 (月))
データベースでは、英字の大文字・小文字を区別したい場合もあります。以下にそんなケースへの対応が紹介されていました。
データベースで大文字と小文字の区別に注意を
http://nosa.cocolog-nifty.com/sanonosa/2007/05/post_c5dc.html
HSQLDBでの可能性 †
M.Kamataki (2009-08-17 22:45:07 (月))
と、ここまで書いて、HSQLDBで完全に不可能か確認していないことに気づきました。上記データベースでは、ある程度英字の大文字・小文字対策がありましたし。。。
そこで、http://hsqldb.org/ を調べるとなんとなくそれらしい説明が以下にありました。
http://hsqldb.org/doc/guide/ch09.html#set_ignorecase-section
どうやら、テーブルを作成する際に、「テキスト[VARCHAR_IGNORECASE]」をフィールドに設定すると、英字の大文字・小文字を区別しなくなるようです。試してみると、パラメータクエリーで「Abc123」で、「ABC123」も「abc123」も検索できましたねぇ。
ただ、COUNT関数は区別するようです。
ページ番号を変えました †
M.Kamataki (2009-08-19 15:22:03 (水))
faq/5/5にページ番号を変更しました。faq/5/3をご覧ください。
ありがとうございます †
匿名 (2009-08-19 19:03:19 (水))
テキスト[VARCHAR_IGNORECASE]に設定することで望んだとおりの結果が出ました。
ありがとうございます。
完了にします †
M.Kamataki (2009-08-20 06:48:42 (木))
コメントありがとうございます。