照合順序

MySQLを使用してSELECT文で値を抽出する際、
1件しか抽出されないはずが意図しないデータを含めて複数件が抽出されました。
条件不足か条件誤りか。と調べ始めましたがどうやらそうでもありません。

原因は照合順序の指定誤りで、大文字小文字を区別しない設定となっていた為でした。
いまからデータベースの設定を変更することもできない状態の為、

照合順序を指定して抽出するように変更
SELECT * FROM USER WHERE ‘NAME’ COLLATE utf8_bin LIKE ‘hogehoge%’;

JOINする際は以下の指定
SELECT * FROM USER LEFT JOIN COMPANY ON USER.NAME = COMPANY.NAME COLLATE utf8_general_ci

抽出は出来ますが、残念ながらIndexは効いてくれないようです。
変換しながら比較するのでしかたありません。

メモ:utf8のCollateを抜粋
utf8_bin
大文字小文字、全角半角を区別する。
utf8_unicode_ci
大文字小文字、全角半角を区別しない。
utf8_general_ci
アルファベット大文字小文字はしない。全角半角を含む他は全て区別する。

初めに決めておくべき内容ですね。

Leave a Reply