mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug #6043 erratic searching for diacriticals in indexed MyISAM UTF-8 table
This commit is contained in:
@ -750,3 +750,32 @@ SELECT id FROM t1 WHERE (list_id = 1) AND (term = "letterd");
|
|||||||
id
|
id
|
||||||
4
|
4
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
SET NAMES latin1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
id int unsigned NOT NULL auto_increment,
|
||||||
|
list_id smallint unsigned NOT NULL,
|
||||||
|
term text NOT NULL,
|
||||||
|
PRIMARY KEY(id),
|
||||||
|
INDEX(list_id, term(19))
|
||||||
|
) TYPE=MyISAM CHARSET=utf8;
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 'TYPE=storage_engine' is deprecated; use 'ENGINE=storage_engine' instead
|
||||||
|
INSERT INTO t1 set list_id = 1, term = "test<73>test";
|
||||||
|
INSERT INTO t1 set list_id = 1, term = "testetest";
|
||||||
|
INSERT INTO t1 set list_id = 1, term = "test<73>test";
|
||||||
|
SELECT id, term FROM t1 where (list_id = 1) AND (term = "test<73>test");
|
||||||
|
id term
|
||||||
|
1 test<73>test
|
||||||
|
2 testetest
|
||||||
|
3 test<73>test
|
||||||
|
SELECT id, term FROM t1 where (list_id = 1) AND (term = "testetest");
|
||||||
|
id term
|
||||||
|
1 test<73>test
|
||||||
|
2 testetest
|
||||||
|
3 test<73>test
|
||||||
|
SELECT id, term FROM t1 where (list_id = 1) AND (term = "test<73>test");
|
||||||
|
id term
|
||||||
|
1 test<73>test
|
||||||
|
2 testetest
|
||||||
|
3 test<73>test
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -592,3 +592,23 @@ SELECT id FROM t1 WHERE (list_id = 1) AND (term = "letterb");
|
|||||||
SELECT id FROM t1 WHERE (list_id = 1) AND (term = "lettera");
|
SELECT id FROM t1 WHERE (list_id = 1) AND (term = "lettera");
|
||||||
SELECT id FROM t1 WHERE (list_id = 1) AND (term = "letterd");
|
SELECT id FROM t1 WHERE (list_id = 1) AND (term = "letterd");
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #6043 erratic searching for diacriticals in indexed MyISAM UTF-8 table
|
||||||
|
#
|
||||||
|
SET NAMES latin1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
id int unsigned NOT NULL auto_increment,
|
||||||
|
list_id smallint unsigned NOT NULL,
|
||||||
|
term text NOT NULL,
|
||||||
|
PRIMARY KEY(id),
|
||||||
|
INDEX(list_id, term(19))
|
||||||
|
) TYPE=MyISAM CHARSET=utf8;
|
||||||
|
INSERT INTO t1 set list_id = 1, term = "test<73>test";
|
||||||
|
INSERT INTO t1 set list_id = 1, term = "testetest";
|
||||||
|
INSERT INTO t1 set list_id = 1, term = "test<73>test";
|
||||||
|
SELECT id, term FROM t1 where (list_id = 1) AND (term = "test<73>test");
|
||||||
|
SELECT id, term FROM t1 where (list_id = 1) AND (term = "testetest");
|
||||||
|
SELECT id, term FROM t1 where (list_id = 1) AND (term = "test<73>test");
|
||||||
|
DROP TABLE t1;
|
||||||
|
12
sql/field.cc
12
sql/field.cc
@ -5000,10 +5000,10 @@ String *Field_blob::val_str(String *val_buffer __attribute__((unused)),
|
|||||||
int Field_blob::cmp(const char *a,uint32 a_length, const char *b,
|
int Field_blob::cmp(const char *a,uint32 a_length, const char *b,
|
||||||
uint32 b_length)
|
uint32 b_length)
|
||||||
{
|
{
|
||||||
int diff=my_strnncoll(field_charset,
|
return field_charset->coll->strnncoll(field_charset,
|
||||||
(const uchar*)a,min(a_length,b_length),
|
(const uchar*)a, a_length,
|
||||||
(const uchar*)b,min(a_length,b_length));
|
(const uchar*)b, b_length,
|
||||||
return diff ? diff : (int) (a_length - b_length);
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -5087,8 +5087,8 @@ void Field_blob::get_key_image(char *buff,uint length,
|
|||||||
|
|
||||||
get_ptr(&blob);
|
get_ptr(&blob);
|
||||||
uint char_length= length / cs->mbmaxlen;
|
uint char_length= length / cs->mbmaxlen;
|
||||||
char_length= my_charpos(cs, blob, blob + length, char_length);
|
char_length= my_charpos(cs, blob, blob + blob_length, char_length);
|
||||||
set_if_smaller(length, char_length);
|
set_if_smaller(blob_length, char_length);
|
||||||
|
|
||||||
if ((uint32) length > blob_length)
|
if ((uint32) length > blob_length)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user