diff --git a/myisam/ft_nlq_search.c b/myisam/ft_nlq_search.c index a38c52704f7..4f659216d98 100644 --- a/myisam/ft_nlq_search.c +++ b/myisam/ft_nlq_search.c @@ -73,6 +73,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) uchar *keybuff=aio->keybuff; MI_KEYDEF *keyinfo=info->s->keyinfo+aio->keynr; my_off_t key_root=info->s->state.key_root[aio->keynr]; + uint extra=HA_FT_WLEN+info->s->base.rec_reflength; #if HA_FT_WTYPE == HA_KEYTYPE_FLOAT float tmp_weight; #else @@ -94,7 +95,8 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) { if (keylen && - mi_compare_text(aio->charset,info->lastkey,keylen, keybuff,keylen,0)) + mi_compare_text(aio->charset,info->lastkey+1, + info->lastkey_length-extra, keybuff+1,keylen,0)) break; subkeys=ft_sintXkorr(info->lastkey+keylen); diff --git a/mysql-test/r/fulltext.result b/mysql-test/r/fulltext.result index 31ed252b22d..3dacb9cc124 100644 --- a/mysql-test/r/fulltext.result +++ b/mysql-test/r/fulltext.result @@ -29,8 +29,8 @@ Full-text indexes are called collections Only MyISAM tables support collections select * from t1 where MATCH(a,b) AGAINST ("indexes collections" WITH QUERY EXPANSION); a b -Full-text indexes are called collections Only MyISAM tables support collections +Full-text indexes are called collections MySQL has now support for full-text search explain select * from t1 where MATCH(a,b) AGAINST ("collections"); id select_type table type possible_keys key key_len ref rows Extra @@ -294,18 +294,27 @@ INSERT t1 VALUES ('Mit freundlichem Gr SET NAMES koi8r; INSERT t1 VALUES ("üÔÏ ÍÙ - ÏÐÉÌËÉ"),("ïÔÌÅÚØ, ÇÎÉÄÁ!"), ("îÅ ×ÌÅÚÁÊ, ÕÂØÅÔ!"),("É ÂÕÄÅÔ ÐÒÁ×!"); -SELECT t, charset(t) FROM t1 WHERE MATCH t AGAINST ('ïðéìëé'); -t charset(t) -üÔÏ ÍÙ - ÏÐÉÌËÉ utf8 -SELECT t, charset(t) FROM t1 WHERE MATCH t AGAINST ('ðÒá*' IN BOOLEAN MODE); -t charset(t) -É ÂÕÄÅÔ ÐÒÁ×! utf8 +SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('ïðéìëé'); +t collation(t) +üÔÏ ÍÙ - ÏÐÉÌËÉ utf8_general_ci +SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('ðÒá*' IN BOOLEAN MODE); +t collation(t) +É ÂÕÄÅÔ ÐÒÁ×! utf8_general_ci SELECT * FROM t1 WHERE MATCH t AGAINST ('ÜÔÏ' IN BOOLEAN MODE); t -SELECT t, charset(t) FROM t1 WHERE MATCH t AGAINST ('Osnabrück'); -t charset(t) +SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('Osnabrück'); +t collation(t) SET NAMES latin1; -SELECT t, charset(t) FROM t1 WHERE MATCH t AGAINST ('Osnabrück'); -t charset(t) -aus Osnabrück utf8 +SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('Osnabrück'); +t collation(t) +aus Osnabrück utf8_general_ci +SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('Osnabrueck'); +t collation(t) +alter table t1 modify t varchar(200) collate latin1_german2_ci not null; +SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('Osnabrück'); +t collation(t) +aus Osnabrück latin1_german2_ci +SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('Osnabrueck'); +t collation(t) +aus Osnabrück latin1_german2_ci DROP TABLE t1; diff --git a/mysql-test/t/fulltext.test b/mysql-test/t/fulltext.test index 37913d2d747..422ca23de90 100644 --- a/mysql-test/t/fulltext.test +++ b/mysql-test/t/fulltext.test @@ -237,11 +237,16 @@ INSERT t1 VALUES ('Mit freundlichem Gr SET NAMES koi8r; INSERT t1 VALUES ("üÔÏ ÍÙ - ÏÐÉÌËÉ"),("ïÔÌÅÚØ, ÇÎÉÄÁ!"), ("îÅ ×ÌÅÚÁÊ, ÕÂØÅÔ!"),("É ÂÕÄÅÔ ÐÒÁ×!"); -SELECT t, charset(t) FROM t1 WHERE MATCH t AGAINST ('ïðéìëé'); -SELECT t, charset(t) FROM t1 WHERE MATCH t AGAINST ('ðÒá*' IN BOOLEAN MODE); +SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('ïðéìëé'); +SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('ðÒá*' IN BOOLEAN MODE); SELECT * FROM t1 WHERE MATCH t AGAINST ('ÜÔÏ' IN BOOLEAN MODE); -SELECT t, charset(t) FROM t1 WHERE MATCH t AGAINST ('Osnabrück'); +SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('Osnabrück'); SET NAMES latin1; -SELECT t, charset(t) FROM t1 WHERE MATCH t AGAINST ('Osnabrück'); +SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('Osnabrück'); +SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('Osnabrueck'); +#alter table t1 modify t text character set latin1 collate latin1_german2_ci not null; +alter table t1 modify t varchar(200) collate latin1_german2_ci not null; +SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('Osnabrück'); +SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('Osnabrueck'); DROP TABLE t1;