Skip to content

Commit 0e5eef8

Browse files
author
Alexander Barkov
committed
MDEV-14350 Index use with collation utf8mb4_unicode_nopad_ci on LIKE pattern with wrong results
1 parent dfafe15 commit 0e5eef8

17 files changed

+285
-7
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--echo #
2+
--echo # MDEV-14350 Index use with collation utf8mb4_unicode_nopad_ci on LIKE pattern with wrong results
3+
--echo #
4+
5+
CREATE OR REPLACE TABLE t1 AS SELECT SPACE(50) AS a, SPACE (50) AS b;
6+
ALTER TABLE t1 ADD KEY(a), ADD KEY(b);
7+
SHOW CREATE TABLE t1;
8+
INSERT INTO t1 VALUES ('111', '111');
9+
INSERT INTO t1 VALUES ('222', '222');
10+
INSERT INTO t1 VALUES ('333', '333');
11+
INSERT INTO t1 VALUES ('444', '444');
12+
SELECT * FROM t1 WHERE a LIKE '111%';
13+
SELECT * FROM t1 IGNORE INDEX (a) WHERE a LIKE '111%';
14+
DROP TABLE t1;

mysql-test/r/ctype_latin1.result

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8804,6 +8804,31 @@ DROP TABLE t1;
88048804
# End of ctype_pad.inc
88058805
#
88068806
SET STORAGE_ENGINE=Default;
8807+
SET NAMES latin1;
8808+
#
8809+
# MDEV-14350 Index use with collation utf8mb4_unicode_nopad_ci on LIKE pattern with wrong results
8810+
#
8811+
CREATE OR REPLACE TABLE t1 AS SELECT SPACE(50) AS a, SPACE (50) AS b;
8812+
ALTER TABLE t1 ADD KEY(a), ADD KEY(b);
8813+
SHOW CREATE TABLE t1;
8814+
Table Create Table
8815+
t1 CREATE TABLE `t1` (
8816+
`a` varchar(50) DEFAULT NULL,
8817+
`b` varchar(50) DEFAULT NULL,
8818+
KEY `a` (`a`),
8819+
KEY `b` (`b`)
8820+
) ENGINE=MyISAM DEFAULT CHARSET=latin1
8821+
INSERT INTO t1 VALUES ('111', '111');
8822+
INSERT INTO t1 VALUES ('222', '222');
8823+
INSERT INTO t1 VALUES ('333', '333');
8824+
INSERT INTO t1 VALUES ('444', '444');
8825+
SELECT * FROM t1 WHERE a LIKE '111%';
8826+
a b
8827+
111 111
8828+
SELECT * FROM t1 IGNORE INDEX (a) WHERE a LIKE '111%';
8829+
a b
8830+
111 111
8831+
DROP TABLE t1;
88078832
#
88088833
# End of 10.2 tests
88098834
#

mysql-test/r/ctype_like_range.result

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4430,5 +4430,50 @@ a_ 6100 61FF
44304430
a% 61000000000000000000 61FFFFFFFFFFFFFFFFFF
44314431
DROP TABLE t1;
44324432
#
4433+
# MDEV-14350 Index use with collation utf8mb4_unicode_nopad_ci on LIKE pattern with wrong results
4434+
#
4435+
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_swedish_nopad_ci);
4436+
INSERT INTO t1 VALUES ('111%');
4437+
SELECT a, HEX(LIKE_RANGE_MIN(a,200)) FROM t1;
4438+
a HEX(LIKE_RANGE_MIN(a,200))
4439+
111% 313131
4440+
DROP TABLE t1;
4441+
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_general_nopad_ci);
4442+
INSERT INTO t1 VALUES ('111%');
4443+
SELECT a, HEX(LIKE_RANGE_MIN(a,200)) FROM t1;
4444+
a HEX(LIKE_RANGE_MIN(a,200))
4445+
111% 313131
4446+
DROP TABLE t1;
4447+
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci);
4448+
INSERT INTO t1 VALUES ('111%');
4449+
SELECT a, HEX(LIKE_RANGE_MIN(a,200)) FROM t1;
4450+
a HEX(LIKE_RANGE_MIN(a,200))
4451+
111% 313131
4452+
DROP TABLE t1;
4453+
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_nopad_ci);
4454+
INSERT INTO t1 VALUES ('111%');
4455+
SELECT a, HEX(LIKE_RANGE_MIN(a,200)) FROM t1;
4456+
a HEX(LIKE_RANGE_MIN(a,200))
4457+
111% 313131
4458+
DROP TABLE t1;
4459+
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET ucs2 COLLATE ucs2_unicode_nopad_ci);
4460+
INSERT INTO t1 VALUES ('111%');
4461+
SELECT a, HEX(LIKE_RANGE_MIN(a,200)) FROM t1;
4462+
a HEX(LIKE_RANGE_MIN(a,200))
4463+
111% 003100310031
4464+
DROP TABLE t1;
4465+
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf16 COLLATE utf16_unicode_nopad_ci);
4466+
INSERT INTO t1 VALUES ('111%');
4467+
SELECT a, HEX(LIKE_RANGE_MIN(a,200)) FROM t1;
4468+
a HEX(LIKE_RANGE_MIN(a,200))
4469+
111% 003100310031
4470+
DROP TABLE t1;
4471+
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf32 COLLATE utf32_unicode_nopad_ci);
4472+
INSERT INTO t1 VALUES ('111%');
4473+
SELECT a, HEX(LIKE_RANGE_MIN(a,200)) FROM t1;
4474+
a HEX(LIKE_RANGE_MIN(a,200))
4475+
111% 000000310000003100000031
4476+
DROP TABLE t1;
4477+
#
44334478
# End of 10.2 tests
44344479
#

mysql-test/r/ctype_ucs2_uca.result

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,32 @@ DROP TABLE t1;
559559
# End of ctype_pad.inc
560560
#
561561
SET STORAGE_ENGINE=Default;
562+
SET NAMES utf8, collation_connection=ucs2_unicode_520_nopad_ci;
563+
#
564+
# MDEV-14350 Index use with collation utf8mb4_unicode_nopad_ci on LIKE pattern with wrong results
565+
#
566+
CREATE OR REPLACE TABLE t1 AS SELECT SPACE(50) AS a, SPACE (50) AS b;
567+
ALTER TABLE t1 ADD KEY(a), ADD KEY(b);
568+
SHOW CREATE TABLE t1;
569+
Table Create Table
570+
t1 CREATE TABLE `t1` (
571+
`a` varchar(50) CHARACTER SET ucs2 COLLATE ucs2_unicode_520_nopad_ci DEFAULT NULL,
572+
`b` varchar(50) CHARACTER SET ucs2 COLLATE ucs2_unicode_520_nopad_ci DEFAULT NULL,
573+
KEY `a` (`a`),
574+
KEY `b` (`b`)
575+
) ENGINE=MyISAM DEFAULT CHARSET=latin1
576+
INSERT INTO t1 VALUES ('111', '111');
577+
INSERT INTO t1 VALUES ('222', '222');
578+
INSERT INTO t1 VALUES ('333', '333');
579+
INSERT INTO t1 VALUES ('444', '444');
580+
SELECT * FROM t1 WHERE a LIKE '111%';
581+
a b
582+
111 111
583+
SELECT * FROM t1 IGNORE INDEX (a) WHERE a LIKE '111%';
584+
a b
585+
111 111
586+
DROP TABLE t1;
587+
SET NAMES utf8;
562588
#
563589
# End of 10.2 tests
564590
#

mysql-test/r/ctype_utf16_uca.result

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7866,6 +7866,32 @@ DROP TABLE t1;
78667866
# End of ctype_pad.inc
78677867
#
78687868
SET STORAGE_ENGINE=Default;
7869+
SET NAMES utf8, collation_connection=utf16_unicode_520_nopad_ci;
7870+
#
7871+
# MDEV-14350 Index use with collation utf8mb4_unicode_nopad_ci on LIKE pattern with wrong results
7872+
#
7873+
CREATE OR REPLACE TABLE t1 AS SELECT SPACE(50) AS a, SPACE (50) AS b;
7874+
ALTER TABLE t1 ADD KEY(a), ADD KEY(b);
7875+
SHOW CREATE TABLE t1;
7876+
Table Create Table
7877+
t1 CREATE TABLE `t1` (
7878+
`a` varchar(50) CHARACTER SET utf16 COLLATE utf16_unicode_520_nopad_ci DEFAULT NULL,
7879+
`b` varchar(50) CHARACTER SET utf16 COLLATE utf16_unicode_520_nopad_ci DEFAULT NULL,
7880+
KEY `a` (`a`),
7881+
KEY `b` (`b`)
7882+
) ENGINE=MyISAM DEFAULT CHARSET=latin1
7883+
INSERT INTO t1 VALUES ('111', '111');
7884+
INSERT INTO t1 VALUES ('222', '222');
7885+
INSERT INTO t1 VALUES ('333', '333');
7886+
INSERT INTO t1 VALUES ('444', '444');
7887+
SELECT * FROM t1 WHERE a LIKE '111%';
7888+
a b
7889+
111 111
7890+
SELECT * FROM t1 IGNORE INDEX (a) WHERE a LIKE '111%';
7891+
a b
7892+
111 111
7893+
DROP TABLE t1;
7894+
SET NAMES utf8;
78697895
#
78707896
# End of 10.2 tests
78717897
#

mysql-test/r/ctype_utf32_uca.result

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7886,6 +7886,32 @@ DROP TABLE t1;
78867886
# End of ctype_pad.inc
78877887
#
78887888
SET STORAGE_ENGINE=Default;
7889+
SET NAMES utf8, collation_connection=utf32_unicode_520_nopad_ci;
7890+
#
7891+
# MDEV-14350 Index use with collation utf8mb4_unicode_nopad_ci on LIKE pattern with wrong results
7892+
#
7893+
CREATE OR REPLACE TABLE t1 AS SELECT SPACE(50) AS a, SPACE (50) AS b;
7894+
ALTER TABLE t1 ADD KEY(a), ADD KEY(b);
7895+
SHOW CREATE TABLE t1;
7896+
Table Create Table
7897+
t1 CREATE TABLE `t1` (
7898+
`a` varchar(50) CHARACTER SET utf32 COLLATE utf32_unicode_520_nopad_ci DEFAULT NULL,
7899+
`b` varchar(50) CHARACTER SET utf32 COLLATE utf32_unicode_520_nopad_ci DEFAULT NULL,
7900+
KEY `a` (`a`),
7901+
KEY `b` (`b`)
7902+
) ENGINE=MyISAM DEFAULT CHARSET=latin1
7903+
INSERT INTO t1 VALUES ('111', '111');
7904+
INSERT INTO t1 VALUES ('222', '222');
7905+
INSERT INTO t1 VALUES ('333', '333');
7906+
INSERT INTO t1 VALUES ('444', '444');
7907+
SELECT * FROM t1 WHERE a LIKE '111%';
7908+
a b
7909+
111 111
7910+
SELECT * FROM t1 IGNORE INDEX (a) WHERE a LIKE '111%';
7911+
a b
7912+
111 111
7913+
DROP TABLE t1;
7914+
SET NAMES utf8;
78897915
#
78907916
# End of 10.2 tests
78917917
#

mysql-test/r/ctype_utf8_uca.result

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,31 @@ DROP TABLE t1;
559559
# End of ctype_pad.inc
560560
#
561561
SET STORAGE_ENGINE=Default;
562+
SET NAMES utf8 COLLATE utf8_unicode_nopad_ci;
563+
#
564+
# MDEV-14350 Index use with collation utf8mb4_unicode_nopad_ci on LIKE pattern with wrong results
565+
#
566+
CREATE OR REPLACE TABLE t1 AS SELECT SPACE(50) AS a, SPACE (50) AS b;
567+
ALTER TABLE t1 ADD KEY(a), ADD KEY(b);
568+
SHOW CREATE TABLE t1;
569+
Table Create Table
570+
t1 CREATE TABLE `t1` (
571+
`a` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci DEFAULT NULL,
572+
`b` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci DEFAULT NULL,
573+
KEY `a` (`a`),
574+
KEY `b` (`b`)
575+
) ENGINE=MyISAM DEFAULT CHARSET=latin1
576+
INSERT INTO t1 VALUES ('111', '111');
577+
INSERT INTO t1 VALUES ('222', '222');
578+
INSERT INTO t1 VALUES ('333', '333');
579+
INSERT INTO t1 VALUES ('444', '444');
580+
SELECT * FROM t1 WHERE a LIKE '111%';
581+
a b
582+
111 111
583+
SELECT * FROM t1 IGNORE INDEX (a) WHERE a LIKE '111%';
584+
a b
585+
111 111
586+
DROP TABLE t1;
562587
#
563588
# End of 10.2 tests
564589
#

mysql-test/r/ctype_utf8mb4_uca.result

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6576,6 +6576,32 @@ DROP TABLE t1;
65766576
# End of ctype_pad.inc
65776577
#
65786578
SET STORAGE_ENGINE=Default;
6579+
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_nopad_ci;
6580+
#
6581+
# MDEV-14350 Index use with collation utf8mb4_unicode_nopad_ci on LIKE pattern with wrong results
6582+
#
6583+
CREATE OR REPLACE TABLE t1 AS SELECT SPACE(50) AS a, SPACE (50) AS b;
6584+
ALTER TABLE t1 ADD KEY(a), ADD KEY(b);
6585+
SHOW CREATE TABLE t1;
6586+
Table Create Table
6587+
t1 CREATE TABLE `t1` (
6588+
`a` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_nopad_ci DEFAULT NULL,
6589+
`b` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_nopad_ci DEFAULT NULL,
6590+
KEY `a` (`a`),
6591+
KEY `b` (`b`)
6592+
) ENGINE=MyISAM DEFAULT CHARSET=latin1
6593+
INSERT INTO t1 VALUES ('111', '111');
6594+
INSERT INTO t1 VALUES ('222', '222');
6595+
INSERT INTO t1 VALUES ('333', '333');
6596+
INSERT INTO t1 VALUES ('444', '444');
6597+
SELECT * FROM t1 WHERE a LIKE '111%';
6598+
a b
6599+
111 111
6600+
SELECT * FROM t1 IGNORE INDEX (a) WHERE a LIKE '111%';
6601+
a b
6602+
111 111
6603+
DROP TABLE t1;
6604+
SET NAMES utf8mb4;
65796605
#
65806606
# End of 10.2 tests
65816607
#

mysql-test/t/ctype_latin1.test

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,9 @@ let $coll='latin1_nopad_bin';
411411
let $coll_pad='latin1_bin';
412412
--source include/ctype_pad_all_engines.inc
413413

414+
SET NAMES latin1;
415+
--source include/ctype_like_range_mdev14350.inc
416+
414417
--echo #
415418
--echo # End of 10.2 tests
416419
--echo #

mysql-test/t/ctype_like_range.test

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,46 @@ INSERT INTO t1 (a) VALUES ('a'),('a_'),('a%');
154154
SELECT a, HEX(mn), HEX(mx) FROM t1;
155155
DROP TABLE t1;
156156

157+
--echo #
158+
--echo # MDEV-14350 Index use with collation utf8mb4_unicode_nopad_ci on LIKE pattern with wrong results
159+
--echo #
160+
161+
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_swedish_nopad_ci);
162+
INSERT INTO t1 VALUES ('111%');
163+
SELECT a, HEX(LIKE_RANGE_MIN(a,200)) FROM t1;
164+
DROP TABLE t1;
165+
166+
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_general_nopad_ci);
167+
INSERT INTO t1 VALUES ('111%');
168+
SELECT a, HEX(LIKE_RANGE_MIN(a,200)) FROM t1;
169+
DROP TABLE t1;
170+
171+
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_nopad_ci);
172+
INSERT INTO t1 VALUES ('111%');
173+
SELECT a, HEX(LIKE_RANGE_MIN(a,200)) FROM t1;
174+
DROP TABLE t1;
175+
176+
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_nopad_ci);
177+
INSERT INTO t1 VALUES ('111%');
178+
SELECT a, HEX(LIKE_RANGE_MIN(a,200)) FROM t1;
179+
DROP TABLE t1;
180+
181+
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET ucs2 COLLATE ucs2_unicode_nopad_ci);
182+
INSERT INTO t1 VALUES ('111%');
183+
SELECT a, HEX(LIKE_RANGE_MIN(a,200)) FROM t1;
184+
DROP TABLE t1;
185+
186+
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf16 COLLATE utf16_unicode_nopad_ci);
187+
INSERT INTO t1 VALUES ('111%');
188+
SELECT a, HEX(LIKE_RANGE_MIN(a,200)) FROM t1;
189+
DROP TABLE t1;
190+
191+
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf32 COLLATE utf32_unicode_nopad_ci);
192+
INSERT INTO t1 VALUES ('111%');
193+
SELECT a, HEX(LIKE_RANGE_MIN(a,200)) FROM t1;
194+
DROP TABLE t1;
195+
196+
157197
--echo #
158198
--echo # End of 10.2 tests
159199
--echo #

0 commit comments

Comments
 (0)