The sky is the limit

Vue.js、PHP、Java、Cordova、Monacaを中心にハイブリッドアプリ開発、PWA開発など効率的なWEB、iOS、Androidアプリ開発の情報を共有します。

Mysqlで大文字小文字を区別してレコードを取得する

Mysqlで大文字小文字を区別してレコードを取得する

f:id:duo-taro100:20160218004611p:plain

今回は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;

以上です。
どちらの方法がいいかは設計・仕様次第ですかね。