岩本隆史の日記帳(アーカイブ)

はてなダイアリーのサービス終了をうけて移行したものです。更新はしません。

case sensitiveな文字列カラムにはbinary属性を指定すべし

日記に書かないと忘れてしまいそうなので。

一概には言えませんが、emailをログイン名として認証するのであればbinary属性をつけておいた方がよいかもしれません。binary属性が無いと、大文字小文字が違ってもヒットしてしまうので、正確に認証するためにはヒット後にphpで再判定する必要があります。

Re: CakePHP日記 #006 ディレクトリ構成とDB設計 : akiyan.com

MySQLにはそんな機能があるんですね。と思って調べると、マニュアルにもしっかり書かれていました。

すべての文字列比較は、デフォルトでは大文字と小文字を区別せず、現在のキャラクタセット照合順序 で決められたソート順で行われます。このキャラクタセット照合順序は、デフォルトではlatin1(cp1252 West European)です。これを変更するには、BINARY属性を指定してカラムを宣言するか、BINARY キャストを使用して、字句順序よりもキャラクタコード値を使用して比較が行われるようにする必要があります。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 1.7.1 標準 SQL に対する MySQL 拡張機能

というわけで、MySQLではcase sensitiveな文字列カラムにbinary属性を指定すべし、というお話でした。