MYSQLのLIKEでの検索で、大文字小文字を区別しないで検索したいのですが、できません。


mysql5を利用しています。対象カラムはvarchar(255)です。

hoges
------
id (int)
name (varchar255)
------

SELECT * FROM hoges WHERE name LIKE '%Taro';
SELECT * FROM hoges WHERE name LIKE '%taro';

とどちらで検索しても、nameに入った「taro」にHITさせたいです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/04/14 04:23:07
  • 終了:2009/04/14 22:25:35

ベストアンサー

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912009/04/14 07:36:10

ポイント44pt

MySQL のデフォルトの動作は大文字・小文字を区別しないはずですが、下記のようにカラムに

BINARY 属性を付けた場合区別するようになります。

http://nayuzak.blog50.fc2.com/blog-entry-17.html


ご使用のテーブルはそのようになっていないでしょうか。

その場合下記のように CONVER 関数を使用し変換することで、区別しないで検索が可能となります。

SELECT 'A' LIKE CONVERT(blob_col USING latin1) FROM tbl_name;

詳細は下記をご参照ください。

http://ftp.ku.ac.th/pub/mirror/mysql/doc/refman/5.1/ja/cast-func...

id:cbic

ありがとうございます。バイナリかどうかって調べる方法ありますか?該当テーブルをdesc hogesってしても、varcharとしかでないんですよ。でもwhere lower(name) LIKE '%Taro';ってすると、小文字もHITします。

2009/04/14 19:22:21

その他の回答(1件)

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912009/04/14 07:36:10ここでベストアンサー

ポイント44pt

MySQL のデフォルトの動作は大文字・小文字を区別しないはずですが、下記のようにカラムに

BINARY 属性を付けた場合区別するようになります。

http://nayuzak.blog50.fc2.com/blog-entry-17.html


ご使用のテーブルはそのようになっていないでしょうか。

その場合下記のように CONVER 関数を使用し変換することで、区別しないで検索が可能となります。

SELECT 'A' LIKE CONVERT(blob_col USING latin1) FROM tbl_name;

詳細は下記をご参照ください。

http://ftp.ku.ac.th/pub/mirror/mysql/doc/refman/5.1/ja/cast-func...

id:cbic

ありがとうございます。バイナリかどうかって調べる方法ありますか?該当テーブルをdesc hogesってしても、varcharとしかでないんですよ。でもwhere lower(name) LIKE '%Taro';ってすると、小文字もHITします。

2009/04/14 19:22:21
id:chuken_kenkou No.2

chuken_kenkou回答回数722ベストアンサー獲得回数542009/04/14 15:38:01

ポイント26pt

文字コードは、何を使っているのでしょうか?

name列は、varchar(255) binaryとしているのでしょうか?

binaryでないなら、MySQLでは大文字と小文字を区別しないので、特に工夫しなくてもそのまま期待した結果を得られるはずです。


MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.3.2.2 ケース依存性



もし、binaryであるなら、lower関数やupper関数で、大文字か小文字に統一させる方法があります。

set @ptn='%taro';
select * from hoges
 where name like lower(@ptn)
id:cbic

binaryではないんですが・・・。なぞですね。

ちなみに、バイナリかどうかって調べる方法ありますか?該当テーブルをdesc hogesってしても、varcharとしかでないんですよ。でもwhere lower(name) LIKE '%Taro';ってすると、小文字もHITします。

2009/04/14 19:22:34
  • id:chuken_kenkou
    MySQLの正確なバージョン、以下の検索結果を提示できませんか?

    (1)SQLが入力できる状態で、次の命令を実行
     ※現在、SQLを実行している方法と同じ方法でコマンドを投げてください

    show variables like 'char%'

    (2)SQLが入力できる上状態で、次の命令を実行

    show create table 表名
  • id:cbic
    mysql> +--------------------------+----------------------------+
    -> | Variable_name | Value |
    -> +--------------------------+----------------------------+
    -> | character_set_client | ujis |
    -> | character_set_connection | ujis |
    -> | character_set_database | utf8 |
    -> | character_set_filesystem | binary |
    -> | character_set_results | ujis |
    -> | character_set_server | ujis |
    -> | character_set_system | utf8 |
    -> | character_sets_dir | /usr/share/mysql/charsets/ |
    -> +--------------------------+----------------------------+

    `name` text collate utf8_bin,

    あ、varcharじゃなくて、textですね・・・これも関係ありますでしょうか。
  • id:cbic
    5.0.27です。
  • id:Mook
    `name` text collate utf8_bin
    text は文字列ですが、 utf8_bin って思いきりBINARY 属性を指定しているじゃないですかw。
    (修飾部は UTF8 の BINARY という意味です)

    lower でも、何でもいいのですが関数を通して文字列に変換されれば、文字列としての挙動通り
    大文字小文字を無視します。
  • id:cbic
    そうなんですか!お騒がせしました。。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません