[前][次][番号順一覧][スレッド一覧]

mysql:12103

From: <a2cf@xxxxxxxxxx>
Date: Wed, 07 Sep 2005 20:54:10 +0900
Subject: [mysql 12103] MySQL4.1.14でのLIKE演算子

atsushiです。

2ヶ月ほど前にMySQL4.1.12でのLIKE演算子に関して質問したものです。
([mysql 11642]  http://bugs.mysql.com/bug.php?id=11650 )

その後、これを修正したMySQL4.1.14がダウンロードできるようになったのですが、また新たな問題が発生しました。
前回同様、バイト数指定のインデックスを張ったテーブルに対してselectをすると、値に「_」や「%」を含む時、条件によって検索結果が0件になります。
具体的には、以下で作成したテストテーブルで、インデックスに指定した3バイト目までの部分の値に「_」や「%」を含む時、マッチしなくなります。
3バイトより後の部分に「_」や「%」を含む場合は問題ありません。
また、バイト数指定のインデックスでない場合は、全て問題ありませんでした。

他の方でも同様の問題は発生しておりますでしょうか?

環境: MySQL4.1.14 Linux (x86, glibc-2.2, static, gcc) Standard版

----------------------
●テストテーブル作成 
drop table if exists t1;
create table t1(c1 varchar(50) not null, index(c1(3))) engine = innodb default
character set = cp932;

insert into t1 values('abcdef');
insert into t1 values('_bcdef');
insert into t1 values('a_cdef');
insert into t1 values('ab_def');
insert into t1 values('abc_ef');
insert into t1 values('abcd_f');
insert into t1 values('abcde_');

●テスト結果
select * from t1 where c1 like 'ab_def';  →2件 正常

select * from t1 where c1 like 'ab\_def';  →0件 異常 「ab_def」のはず
select * from t1 where c1 like 'ab#_def' escape '#';  →0件 異常 同上

(インデックスに指定したバイト数より後のところでは正しい)

select * from t1 where c1 like 'abc_ef';  →2件 正常

select * from t1 where c1 like 'abc\_ef';  →1件 正常
select * from t1 where c1 like 'abc#_ef' escape '#';  →1件 正常
----------------------


上記の「_」を「%」に変えたテストも同様でした。
また、cp932以外にutf8、ascii、latin1でも同様でした。(%はテストしていません)

sjisにした場合は、「\」の扱いからか、以下のSQLだけ検索結果が異なりました。
これは自分のSQL記述の問題かと思いますが・・・。

select * from t1 where c1 like 'abc\_ef';  →0件 異常? 「abc_ef」のはず
select * from t1 where c1 like 'abc\\_ef';  →0件 異常? 同上
select * from t1 where c1 like 'abc#_ef' escape '#';  →1件 正常



何とぞよろしくお願いします。



[前][次][番号順一覧][スレッド一覧]

->   12103 2005-09-07 20:54 [<a2cf@xxxxxxxxxx>   ] MySQL4.1.14でのLIKE演算子               
     12105 2005-09-08 08:42 ┗["Shuichi Tamagawa" <]                                       
     12106 2005-09-08 09:03  ┗[<a2cf@xxxxxxxxxx>   ]