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> ]