mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 13:02:28 +01:00
Bug #6043 erratic searching for diacriticals in indexed MyISAM UTF-8 table
This commit is contained in:
parent
9b2cc44e74
commit
2f8f0f2eb2
3 changed files with 55 additions and 6 deletions
|
@ -750,3 +750,32 @@ SELECT id FROM t1 WHERE (list_id = 1) AND (term = "letterd");
|
|||
id
|
||||
4
|
||||
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étest";
|
||||
INSERT INTO t1 set list_id = 1, term = "testetest";
|
||||
INSERT INTO t1 set list_id = 1, term = "testètest";
|
||||
SELECT id, term FROM t1 where (list_id = 1) AND (term = "testétest");
|
||||
id term
|
||||
1 testétest
|
||||
2 testetest
|
||||
3 testètest
|
||||
SELECT id, term FROM t1 where (list_id = 1) AND (term = "testetest");
|
||||
id term
|
||||
1 testétest
|
||||
2 testetest
|
||||
3 testètest
|
||||
SELECT id, term FROM t1 where (list_id = 1) AND (term = "testètest");
|
||||
id term
|
||||
1 testétest
|
||||
2 testetest
|
||||
3 testè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 = "letterd");
|
||||
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étest";
|
||||
INSERT INTO t1 set list_id = 1, term = "testetest";
|
||||
INSERT INTO t1 set list_id = 1, term = "testètest";
|
||||
SELECT id, term FROM t1 where (list_id = 1) AND (term = "testé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è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,
|
||||
uint32 b_length)
|
||||
{
|
||||
int diff=my_strnncoll(field_charset,
|
||||
(const uchar*)a,min(a_length,b_length),
|
||||
(const uchar*)b,min(a_length,b_length));
|
||||
return diff ? diff : (int) (a_length - b_length);
|
||||
return field_charset->coll->strnncoll(field_charset,
|
||||
(const uchar*)a, a_length,
|
||||
(const uchar*)b, b_length,
|
||||
0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -5087,8 +5087,8 @@ void Field_blob::get_key_image(char *buff,uint length,
|
|||
|
||||
get_ptr(&blob);
|
||||
uint char_length= length / cs->mbmaxlen;
|
||||
char_length= my_charpos(cs, blob, blob + length, char_length);
|
||||
set_if_smaller(length, char_length);
|
||||
char_length= my_charpos(cs, blob, blob + blob_length, char_length);
|
||||
set_if_smaller(blob_length, char_length);
|
||||
|
||||
if ((uint32) length > blob_length)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue