Mysql は検索において大文字小文字を区別しない

27 4月

いまさら気づいたのですが,Mysql はデフォルトでは検索する際に,大文字と小文字を区別しないようです。

参考サイト:MySQLで大文字小文字を区別させる

他にもたくさんの記事があった。大文字小文字を区別するように,採用したやり方は,

    WHERE name = BINARY '検索したい文字列'

上記のように,BINARYを加えました。

binary は phpadmin で直接実行してみると警告がある。

select * from `テーブル名` WHERE 列の名前 = binary '探したいもの'

上記を実行すると,下のようなメッセージが来る。

Warning: #1287 'BINARY expr' は将来のリリースで廃止予定です。代わりに CAST を使用してください。

何れは修正する必要がありそう。

この binary をつけた検索で上手くいく場合と,上手く行かないデータベースがあった。実際に動かしている環境では上手く動いて検索できるのだが,開発用の環境では上手く検索できなかった。この場合,見つからないという検索結果となっていた。同じコードで結果が異なるので,不思議なことではあったが,これはデータベースを作成する際の照合順序の設定と関連していた。

この設定が異なっていたので,開発環境での検索が上手く機能していなかった。utf8mb3_general_ci に変更した。_ci は検索時に大文字と小文字が区別されない。_cs は区別されるようだ。_cs へ変更すれば,SQL を変えなくても検索が上手く行きそうだが,これは試していない。