DBはOracleを主に触る事が多いのですが、ごくまれにMySQLも触ります。
先日、MySQLのテーブル定義を見ていたら、文字列型にbinaryというキーワードが付いていたので、なんだろうと調べたら、下記のような記述が。
すべての文字列比較は、デフォルトでは大文字と小文字を区別せず、現在のキャラクタセットで決められたソート順で行われる。 これを変更するには、BINARY 属性を指定してカラムを宣言するか、BINARY キャストを使用して、MySQL サーバホストで使用される ASCII の順序に従って比較が行われるようにする必要がある。
おぉ、大文字、小文字が区別されないのがデフォルトですか…
しかも、上記はORDER BYを指定した場合の話みたいに読み取れますが、WHERE句で使用した場合も同じようです。
例えば、
- SELECT col1 FROM hoge_table WHERE col1 = 'a'
とやった場合、col1が'a'と'A'が合致。
小文字/大文字を区別したい場合は、SQLで下記のようにBINARY指定するか、CREATE TABLE時にBINARY指定を該当のカラムにしておく必要があるとのことです。
- SELECT col1 FROM hoge_table WHERE binary col1 = 'a'
自分でテーブル作ってたら、絶対忘れそうなのでここにメモ。
すごく違和感を感じたのですが、MySQLユーザからしてみたら、当然の事なのでしょうか。