MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

SQLのBINARYキーワード活用術!WHERE句で大文字・小文字を区別する比較方法を徹底解説

MySQLでは、WHERE句にBINARYキーワードを使用することで、値を大文字・小文字まで厳密に区別した比較が可能になります。通常の文字列比較では大文字と小文字が同一視されますが、BINARYキーワードを付けることでバイト単位の完全一致比較を実現できます。

ケース1:通常の比較(大文字・小文字を区別しない)

まずは、通常の比較の挙動を確認してみましょう。次のクエリを実行します。

mysql> select 'joHN'='JOHN' as Result;

実行結果は以下の通りです。

+--------+
| Result |
+--------+
|      1 |
+--------+
1 row in set (0.00 sec)

結果は「1(真)」となりました。本来「joHN」と「JOHN」は異なる表記ですが、デフォルトの照合順序では大文字・小文字が区別されないため、同じ文字列として扱われてしまいます。

ケース2:BINARYキーワードで大文字・小文字を区別して比較する

大文字・小文字を区別した比較を行いたい場合は、BINARYキーワードを使用します。

mysql> select binary 'joHN'='JOHN' as Result;

実行結果は以下の通りです。

+--------+
| Result |
+--------+
|      0 |
+--------+
1 row in set (0.00 sec)

今度は「0(偽)」が返されました。続いて、まったく同じ表記同士で比較してみます。

mysql> select binary 'JOHN'='JOHN' as Result;

実行結果は以下の通りです。

+--------+
| Result |
+--------+
|      1 |
+--------+
1 row in set (0.00 sec)

このように、BINARYキーワードを使うことで、完全に一致する場合のみ「1(真)」が返されることが確認できます。

テーブル作成時にカラムを大文字・小文字区別に設定する方法

ポイント:テーブルを作成する際に、カラム定義へBINARYキーワードを指定すると、そのカラム自体を大文字・小文字を区別する仕様にすることができます。

実際にテーブルを作成して確認してみましょう。テーブル作成のクエリは以下の通りです。

mysql> create table binaryKeywordDemo
   -> (
   -> Id int NOT NULL AUTO_INCREMENT,
   -> Name varchar(10) binary,
   -> PRIMARY KEY(Id)
   -> );
Query OK, 0 rows affected (0.88 sec)

レコードの挿入

INSERTコマンドを使って、複数のレコードをテーブルに挿入します。

mysql> insert into binaryKeywordDemo(Name) values('bOB');
Query OK, 1 row affected (0.15 sec)
mysql> insert into binaryKeywordDemo(Name) values('bob');
Query OK, 1 row affected (0.13 sec)
mysql> insert into binaryKeywordDemo(Name) values('BOB');
Query OK, 1 row affected (0.18 sec)
mysql> insert into binaryKeywordDemo(Name) values('Bob');
Query OK, 1 row affected (0.18 sec)
mysql> insert into binaryKeywordDemo(Name) values('bOb');
Query OK, 1 row affected (0.15 sec)
mysql> insert into binaryKeywordDemo(Name) values('boB');
Query OK, 1 row affected (0.21 sec)

全レコードの表示

SELECT文ですべてのレコードを表示します。

mysql> select *from binaryKeywordDemo;

実行結果は以下の通りです。

+----+------+
| Id | Name |
+----+------+
|  1 | bOB  |
|  2 | bob  |
|  3 | BOB  |
|  4 | Bob  |
|  5 | bOb  |
|  6 | boB  |
+----+------+
6 rows in set (0.00 sec)

大文字・小文字を区別した検索の実行

NameカラムにはBINARYが指定されているため、WHERE句による検索も自動的に大文字・小文字が区別されます。「Bob」で完全一致検索を実行してみましょう。

mysql> select *from binaryKeywordDemo where Name='Bob';

実行結果は以下の通りです。

+----+------+
| Id | Name |
+----+------+
|  4 | Bob  |
+----+------+
1 row in set (0.00 sec)

6件のレコードのうち、「Bob」と完全に一致する1件だけが返されました。このようにBINARYキーワードを活用すれば、MySQLでも簡単に大文字・小文字を区別した厳密な文字列比較を実装できます。ユーザーIDやパスワードなど、厳密な一致が求められるデータを扱う際にぜひ活用してください。

  1. C#で2進数を10進数に変換する方法を解説

    C#で2進数を10進数に変換する方法はいくつかありますが、ここではwhileループを使った基本的なアルゴリズムを紹介します。この方法では、入力された2進数の各桁の余り(剰余)を求め、その余りに基数(2のべき乗)を掛けて順次加算していくことで、10進数の値を算出します。変換の仕組み2進数「1010」を例に考えてみましょう。各桁を右から順に取り出し、それぞれに1、2、4、8という基数を掛けて合計します。具体的には以下のような流れになります。最下位の桁(余り)を val % 10 で取得する余りに現在の基数値を掛けて10進数の結果に加算するval / 10 で処理済みの桁を取り除く基数値を2倍して次

  2. PythonとSQLiteで学ぶデータベース操作の基本:sqlite3モジュール入門ガイド

    このチュートリアルでは、SQLiteデータベースを使って、PythonからSQLを操作する方法を学びます。PythonにはSQLiteデータベースに接続するための組み込みモジュールが標準で用意されており、ここではsqlite3モジュールを使用してPythonとSQLiteを連携させます。 SQLiteデータベースへの接続手順 PythonでSQLiteデータベースに接続するには、以下の3つのステップに従います。各手順を確認しながら、実際にプログラムを書いてみましょう。 sqlite3モジュールをインポートします。 sqlite3.connect(db_name)メソッドを使って接続を作成し