Mysqlで大文字小文字を区別してレコードを取得する
今回はMysqlでvarcharの値を指定して、レコードを取得する際に大文字小文字を区別する方法をご紹介します。
Mysqlでは大文字・小文字で区別しない
Mysqlは指定しない限り、取得条件の文字列を大文字・小文字で区別しません。
例えば以下のようなユーザーがいたとします。
ユーザーA
user.user_name : takeshi
ユーザーB
user.user_name : Takeshi
そこで、以下のようなSQLを書いてみます
SELECT user_name FROM user WHERE user_name = 'takeshi';
すると、ユーザーAとユーザーBどちらも取得してしまいます。
これを区別して取得するにはどうすればいいでしょうか。
検索時に「BINARY」を指定する
以下のようにすれば解決です。
SELECT user_name FROM user WHERE user_name = BINARY 'takeshi';
これでユーザーAのみが取得できます。
テーブル定義を変える
上記の例は、一時的な解決方法にしかありません。
いっその事テーブル定義を変えてしまいましょう。
ALTER TABLE `user` MODIFY `user_name` VARCHAR(32) BINARY;
以上です。
どちらの方法がいいかは設計・仕様次第ですかね。