Loading mysql-test/r/ctype_utf8.result +39 −0 Original line number Diff line number Diff line Loading @@ -954,6 +954,45 @@ char_length(a) length(a) a 2 2 12 2 4 ан drop table t1; set names utf8; select 'a\\' like 'a\\'; 'a\\' like 'a\\' 1 select 'aa\\' like 'a%\\'; 'aa\\' like 'a%\\' 1 create table t1 (a char(10), key(a)) character set utf8; insert into t1 values ("a"),("abc"),("abcd"),("hello"),("test"); select * from t1 where a like "abc%"; a abc abcd select * from t1 where a like concat("abc","%"); a abc abcd select * from t1 where a like "ABC%"; a abc abcd select * from t1 where a like "test%"; a test select * from t1 where a like "te_t"; a test select * from t1 where a like "%a%"; a a abc abcd select * from t1 where a like "%abcd%"; a abcd select * from t1 where a like "%abc\d%"; a abcd drop table t1; CREATE TABLE t1 ( a varchar(255) NOT NULL default '', KEY a (a) Loading mysql-test/t/ctype_utf8.test +21 −0 Original line number Diff line number Diff line Loading @@ -810,6 +810,27 @@ alter table t1 modify a char(2) character set utf8; select char_length(a), length(a), a from t1 order by a; drop table t1; # # Bugs#11754: SET NAMES utf8 followed by SELECT "A\\" LIKE "A\\" returns 0 # set names utf8; select 'a\\' like 'a\\'; select 'aa\\' like 'a%\\'; create table t1 (a char(10), key(a)) character set utf8; insert into t1 values ("a"),("abc"),("abcd"),("hello"),("test"); select * from t1 where a like "abc%"; select * from t1 where a like concat("abc","%"); select * from t1 where a like "ABC%"; select * from t1 where a like "test%"; select * from t1 where a like "te_t"; select * from t1 where a like "%a%"; select * from t1 where a like "%abcd%"; select * from t1 where a like "%abc\d%"; drop table t1; # # Bug#9557 MyISAM utf8 table crash # Loading strings/ctype-utf8.c +10 −8 Original line number Diff line number Diff line Loading @@ -1557,7 +1557,7 @@ int my_wildcmp_unicode(CHARSET_INFO *cs, } wildstr+= scan; if (w_wc == (my_wc_t)escape) if (w_wc == (my_wc_t)escape && wildstr < wildend) { if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, (const uchar*)wildend)) <= 0) Loading Loading @@ -1629,13 +1629,17 @@ int my_wildcmp_unicode(CHARSET_INFO *cs, if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, (const uchar*)wildend)) <=0) return 1; wildstr+= scan; if (w_wc == (my_wc_t)escape) { wildstr+= scan; if (wildstr < wildend) { if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, (const uchar*)wildend)) <=0) return 1; wildstr+= scan; } } while (1) Loading @@ -1661,14 +1665,12 @@ int my_wildcmp_unicode(CHARSET_INFO *cs, if (str == str_end) return -1; str+= scan; result= my_wildcmp_unicode(cs, str, str_end, wildstr, wildend, escape, w_one, w_many, weights); if (result <= 0) return result; str+= scan; } } } Loading Loading
mysql-test/r/ctype_utf8.result +39 −0 Original line number Diff line number Diff line Loading @@ -954,6 +954,45 @@ char_length(a) length(a) a 2 2 12 2 4 ан drop table t1; set names utf8; select 'a\\' like 'a\\'; 'a\\' like 'a\\' 1 select 'aa\\' like 'a%\\'; 'aa\\' like 'a%\\' 1 create table t1 (a char(10), key(a)) character set utf8; insert into t1 values ("a"),("abc"),("abcd"),("hello"),("test"); select * from t1 where a like "abc%"; a abc abcd select * from t1 where a like concat("abc","%"); a abc abcd select * from t1 where a like "ABC%"; a abc abcd select * from t1 where a like "test%"; a test select * from t1 where a like "te_t"; a test select * from t1 where a like "%a%"; a a abc abcd select * from t1 where a like "%abcd%"; a abcd select * from t1 where a like "%abc\d%"; a abcd drop table t1; CREATE TABLE t1 ( a varchar(255) NOT NULL default '', KEY a (a) Loading
mysql-test/t/ctype_utf8.test +21 −0 Original line number Diff line number Diff line Loading @@ -810,6 +810,27 @@ alter table t1 modify a char(2) character set utf8; select char_length(a), length(a), a from t1 order by a; drop table t1; # # Bugs#11754: SET NAMES utf8 followed by SELECT "A\\" LIKE "A\\" returns 0 # set names utf8; select 'a\\' like 'a\\'; select 'aa\\' like 'a%\\'; create table t1 (a char(10), key(a)) character set utf8; insert into t1 values ("a"),("abc"),("abcd"),("hello"),("test"); select * from t1 where a like "abc%"; select * from t1 where a like concat("abc","%"); select * from t1 where a like "ABC%"; select * from t1 where a like "test%"; select * from t1 where a like "te_t"; select * from t1 where a like "%a%"; select * from t1 where a like "%abcd%"; select * from t1 where a like "%abc\d%"; drop table t1; # # Bug#9557 MyISAM utf8 table crash # Loading
strings/ctype-utf8.c +10 −8 Original line number Diff line number Diff line Loading @@ -1557,7 +1557,7 @@ int my_wildcmp_unicode(CHARSET_INFO *cs, } wildstr+= scan; if (w_wc == (my_wc_t)escape) if (w_wc == (my_wc_t)escape && wildstr < wildend) { if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, (const uchar*)wildend)) <= 0) Loading Loading @@ -1629,13 +1629,17 @@ int my_wildcmp_unicode(CHARSET_INFO *cs, if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, (const uchar*)wildend)) <=0) return 1; wildstr+= scan; if (w_wc == (my_wc_t)escape) { wildstr+= scan; if (wildstr < wildend) { if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr, (const uchar*)wildend)) <=0) return 1; wildstr+= scan; } } while (1) Loading @@ -1661,14 +1665,12 @@ int my_wildcmp_unicode(CHARSET_INFO *cs, if (str == str_end) return -1; str+= scan; result= my_wildcmp_unicode(cs, str, str_end, wildstr, wildend, escape, w_one, w_many, weights); if (result <= 0) return result; str+= scan; } } } Loading