MySQLのLIKE検索で大文字と小文字を区別する方法(LIKE BINARYの使い方)
MySQLのLIKE演算子は、デフォルトの照合順序(collation)では大文字と小文字を区別せずに比較します。しかし、LIKE BINARYを使うことで、強制的に大文字・小文字を区別した検索が可能になります。
LIKE BINARYの基本構文
大文字と小文字を区別させたい場合は、以下のようにBINARYキーワードを付けて記述します。
SELECT yourColumnName LIKE BINARY 'anyStringValue' FROM yourTableName;
動作確認用のテーブルを作成する
実際に動作を確認するために、テーブルを作成してみましょう。テーブル作成のクエリは次のとおりです。
mysql> create table LikeBinaryDemo
-> (
-> Name varchar(200)
-> );
Query OK, 0 rows affected (0.58 sec)次に、小文字のレコードを挿入します。これにより、大文字と小文字の区別がどう扱われるかを確認できます。
mysql> insert into LikeBinaryDemo values('john');
Query OK, 1 row affected (0.12 sec)テーブル内のレコードを表示して確認しましょう。
mysql> select * from LikeBinaryDemo;
実行結果は以下のとおりです。
+------+ | Name | +------+ | john | +------+ 1 row in set (0.00 sec)
ケース1:BINARYを使用した場合
LIKE BINARYを使うと、MySQLは大文字と小文字を厳密に区別します。ここでは、小文字の「john」と大文字の「JOHN」を比較するため、結果として0(一致しない)が返されます。
mysql> select Name like binary 'JOHN' from LikeBinaryDemo;
実行結果:
+-------------------------+ | Name like binary 'JOHN' | +-------------------------+ | 0 | +-------------------------+ 1 row in set (0.00 sec)
ケース2:BINARYを使用しない場合
次に、BINARYを使わずに同じ比較を行うとどうなるかを見てみましょう。
mysql> select Name like 'JOHN' from LikeBinaryDemo;
実行結果:
+------------------+ | Name like 'JOHN' | +------------------+ | 1 | +------------------+ 1 row in set (0.00 sec)
BINARYを付けない場合は、デフォルトの照合順序によって大文字と小文字が同一視され、結果として1(一致する)が返されます。
まとめ
MySQLでLIKE検索時に大文字と小文字を厳密に区別したい場合は、LIKE BINARYを使用しましょう。通常のLIKEでは照合順序の影響で大文字・小文字が区別されないため、ケースセンシティブな検索が必要な場面ではBINARYキーワードの活用が有効です。
-
MySQLクエリでCASE条件を使ってカウントする方法
MySQLでは、CASE WHENを活用し、COUNT()関数の中にCASE条件を設定することで、特定の条件に一致するレコードだけを数えることができます。この仕組みが成り立つのは、COUNT()関数がNULL値を無視するためです。条件に合わない場合にNULLを返すことで、そのレコードはカウント対象から除外されます。1. サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。 ); Query OK, 0 rows affected (0.61 sec)2. レコードの挿入続いて、insertコマンドを使ってテーブルにデータを登録します。mysql> insert into D
-
MySQLでカラムが主キー(PRIMARY KEY)かどうかを確認する方法
MySQLにおいて、特定のカラムが主キー(プライマリキー)であるかどうかを確認したい場合は、information_schema.columnsテーブルのCOLUMN_NAMEとCOLUMN_KEY=PRIを活用します。これにより、テーブル内のどのカラムが主キーとして設定されているのかを簡単に判定できます。基本構文カラムが主キーかどうかを判定するための基本的な構文は以下の通りです。SELECT column_name, CASE WHEN column_key = PRI THEN メッセージ1 ELSE メッセージ2