SQLiteのLIKEは、デフォルトだと大文字小文字が区別されない。

スポンサーリンク

大文字小文字を区別なく検索したいがために、わざわざUPPER()なんぞかましてたりしたのですが、そもそもそんな必要もなく大文字小文字区別なくひっかかるとのこと。
で、大文字小文字区別したい場合は、、

  • コンパイル時に、-DSQLITE_CASE_SENSITIVE_LIKE を指定する
  • PRAGMA case_sensitive_like = 1 を実行する

の2種類の方法がある模様。
コンパイル時の方は、試していないが、PRAGMAの方は試してみて、実際に大文字小文字が区別されることを確認しました。(Firefoxに同梱されているSQLite3.3.5にて)


INDEXを効かせるために大文字小文字を区別したくないって時はあるけども、そうじゃなくても"PRAGMA case_sensitive_like = 1"にしておいたほうが、検索時に行われる処理が少なくてちょっとは早くなったりするのだろうか。
実行計画見る限りだと、特に差分はみえませんでした。(hoge LIKE '%a%'みたいな場合)