Commit 81914f48 authored by unknown's avatar unknown
Browse files

Bug #6043 erratic searching for diacriticals in indexed MyISAM UTF-8 table

parent 761ae02c
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -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 = "testtest";
INSERT INTO t1 set list_id = 1, term = "testetest";
INSERT INTO t1 set list_id = 1, term = "testtest";
SELECT id, term FROM t1 where (list_id = 1) AND (term = "testtest");
id	term
1	testtest
2	testetest
3	testtest
SELECT id, term FROM t1 where (list_id = 1) AND (term = "testetest");
id	term
1	testtest
2	testetest
3	testtest
SELECT id, term FROM t1 where (list_id = 1) AND (term = "testtest");
id	term
1	testtest
2	testetest
3	testtest
DROP TABLE t1;
+20 −0
Original line number Diff line number Diff line
@@ -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 = "testtest";
INSERT INTO t1 set list_id = 1, term = "testetest";
INSERT INTO t1 set list_id = 1, term = "testtest";
SELECT id, term FROM t1 where (list_id = 1) AND (term = "testtest");
SELECT id, term FROM t1 where (list_id = 1) AND (term = "testetest");
SELECT id, term FROM t1 where (list_id = 1) AND (term = "testtest");
DROP TABLE t1;
+6 −6
Original line number Diff line number Diff line
@@ -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)
  {