AccessのWhere句では全角・半角、大文字・小文字、ひらがな・カタカナの区別がされない
AccessのWhere句では、全角・半角、大文字・小文字、ひらがな・カタカナのそれぞれが区別されません。
例えば、以下のSQLを実行した場合、”Field”に”12345”という値が入っていた場合にも抽出されます。
SELECT * FROM Table1 WHERE Field = '12345'
ほとんどの場合は、上記のような検索がされても問題ないのですが、ログイン画面のような処理では、入力値を厳しくチェックする必要があります。
その際の対処法を以下に載せておきます。
LIKEで中間一致検索を行う場合
SELECT * FROM Table WHERE Field LIKE '*テスト*'
上記を厳密に行いたい場合
SELECT * FROM Table WHERE InStr(1, Field, 'テスト' , 0) >= 1
イコールで検索を行う場合
SELECT * FROM Table WHERE Field = 'テスト'
上記を厳密に行いたい場合
SELECT * FROM Table WHERE StrComp(Field, 'テスト' , 0) = 0
注意点
LIKEを置き換える場合は、中間一致のみ可能で、前方一致や後方一致は行うことが出来ません。
上記のサンプルでは、バイナリ比較を行っているので、通常の検索よりも遅くなる可能性があります。
これが、一番の問題点なのですが、抽出条件のフィールドにインデックスがはられている場合、そのインデックスは使用されません。
ですので、レコード数の多いテーブルで使用することは、おすすめ出来ません。



