文字列型における大文字/小文字の扱い

スポンサーリンク

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ユーザからしてみたら、当然の事なのでしょうか。