MySQLでLOCATE()とかINSTR()とかPOSITION()とかが大文字・小文字を区別してくれない

MySQLで、文字列内の任意の文字が何文字目に出てくるか取得できるLOCATE関数で、大文字と小文字に関係なく最初の文字を取得してきてしまうので対処メモ。

LOCATE関数と同等のINSTR関数とかPOSITION関数でも同じ症状。
こちらの自作ストアドファンクション(とPHP関数)を作る時に悩んだのでメモ。

以下を実行すると、どうなりますかね。

SELECT LOCATE('M', 'MySQL and me');

もちろん「1」が返ってくる。

すると以下はどうか。(「m」が小文字)

SELECT LOCATE('m', 'MySQL and me');

これも「1」が返ってくる。
本当は「me」の「m」の場所を返してほしい。

たぶんDBやテーブルなんかの文字コードに関係するんだと思うけど(そこまでは調べていない・・・)、文字をBINARYに変換するとうまくいった。

SELECT LOCATE( CAST('m' AS BINARY), CAST('MySQL and me' AS BINARY) );

これだと小文字「m」の場所である「11」が返ってきた。