mirror of
https://github.com/MariaDB/server.git
synced 2025-02-01 19:41:47 +01:00
ff9aeb560c
Fulltext index may get corrupt by certain gbk characters. The problem was that when skipping leading non-true-word-characters, we assumed that these characters are always 1 byte long. This is not the case with gbk character set, since non-true-word-characters may be 2 bytes long. Affects 5.0 only.
255 lines
7.7 KiB
Text
255 lines
7.7 KiB
Text
DROP TABLE IF EXISTS t1;
|
||
CREATE TABLE t1 (
|
||
i int(10) unsigned not null auto_increment primary key,
|
||
a varchar(255) not null,
|
||
FULLTEXT KEY (a)
|
||
) ENGINE=MyISAM;
|
||
repair table t1 quick;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 repair status OK
|
||
check table t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
optimize table t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 optimize status OK
|
||
check table t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
select count(*) from t1 where match a against ('aaaxxx');
|
||
count(*)
|
||
260
|
||
select count(*) from t1 where match a against ('aaayyy');
|
||
count(*)
|
||
250
|
||
select count(*) from t1 where match a against ('aaazzz');
|
||
count(*)
|
||
255
|
||
select count(*) from t1 where match a against ('aaaxxx' in boolean mode);
|
||
count(*)
|
||
260
|
||
select count(*) from t1 where match a against ('aaayyy' in boolean mode);
|
||
count(*)
|
||
250
|
||
select count(*) from t1 where match a against ('aaazzz' in boolean mode);
|
||
count(*)
|
||
255
|
||
select count(*) from t1 where match a against ('aaaxxx aaayyy aaazzz');
|
||
count(*)
|
||
765
|
||
select count(*) from t1 where match a against ('aaaxxx aaayyy aaazzz' in boolean mode);
|
||
count(*)
|
||
765
|
||
select count(*) from t1 where match a against ('aaax*' in boolean mode);
|
||
count(*)
|
||
260
|
||
select count(*) from t1 where match a against ('aaay*' in boolean mode);
|
||
count(*)
|
||
250
|
||
select count(*) from t1 where match a against ('aaa*' in boolean mode);
|
||
count(*)
|
||
765
|
||
insert t1 (a) values ('aaaxxx'),('aaayyy');
|
||
insert t1 (a) values ('aaazzz'),('aaazzz'),('aaazzz'),('aaazzz'),('aaazzz');
|
||
select count(*) from t1 where match a against ('aaaxxx');
|
||
count(*)
|
||
261
|
||
select count(*) from t1 where match a against ('aaayyy');
|
||
count(*)
|
||
251
|
||
select count(*) from t1 where match a against ('aaazzz');
|
||
count(*)
|
||
260
|
||
insert t1 (a) values ('aaaxxx 000000');
|
||
select count(*) from t1 where match a against ('000000');
|
||
count(*)
|
||
1
|
||
delete from t1 where match a against ('000000');
|
||
select count(*) from t1 where match a against ('000000');
|
||
count(*)
|
||
0
|
||
select count(*) from t1 where match a against ('aaaxxx');
|
||
count(*)
|
||
261
|
||
delete from t1 where match a against ('aaazzz');
|
||
select count(*) from t1 where match a against ('aaaxxx' in boolean mode);
|
||
count(*)
|
||
261
|
||
select count(*) from t1 where match a against ('aaayyy' in boolean mode);
|
||
count(*)
|
||
251
|
||
select count(*) from t1 where match a against ('aaazzz' in boolean mode);
|
||
count(*)
|
||
0
|
||
select count(*) from t1 where a = 'aaaxxx';
|
||
count(*)
|
||
261
|
||
select count(*) from t1 where a = 'aaayyy';
|
||
count(*)
|
||
251
|
||
select count(*) from t1 where a = 'aaazzz';
|
||
count(*)
|
||
0
|
||
insert t1 (a) values ('aaaxxx 000000');
|
||
select count(*) from t1 where match a against ('000000');
|
||
count(*)
|
||
1
|
||
update t1 set a='aaazzz' where match a against ('000000');
|
||
select count(*) from t1 where match a against ('aaaxxx' in boolean mode);
|
||
count(*)
|
||
261
|
||
select count(*) from t1 where match a against ('aaazzz' in boolean mode);
|
||
count(*)
|
||
1
|
||
update t1 set a='aaazzz' where a = 'aaaxxx';
|
||
update t1 set a='aaaxxx' where a = 'aaayyy';
|
||
select count(*) from t1 where match a against ('aaaxxx' in boolean mode);
|
||
count(*)
|
||
251
|
||
select count(*) from t1 where match a against ('aaayyy' in boolean mode);
|
||
count(*)
|
||
0
|
||
select count(*) from t1 where match a against ('aaazzz' in boolean mode);
|
||
count(*)
|
||
262
|
||
drop table t1;
|
||
CREATE TABLE t1 (
|
||
i int(10) unsigned not null auto_increment primary key,
|
||
a varchar(255) not null,
|
||
FULLTEXT KEY (a)
|
||
) ENGINE=MyISAM;
|
||
select count(*) from t1 where match a against ('aaaxxx');
|
||
count(*)
|
||
260
|
||
select count(*) from t1 where match a against ('aaayyy');
|
||
count(*)
|
||
250
|
||
select count(*) from t1 where match a against ('aaazzz');
|
||
count(*)
|
||
255
|
||
select count(*) from t1 where match a against ('aaaxxx' in boolean mode);
|
||
count(*)
|
||
260
|
||
select count(*) from t1 where match a against ('aaayyy' in boolean mode);
|
||
count(*)
|
||
250
|
||
select count(*) from t1 where match a against ('aaazzz' in boolean mode);
|
||
count(*)
|
||
255
|
||
select count(*) from t1 where match a against ('aaaxxx aaayyy aaazzz');
|
||
count(*)
|
||
765
|
||
select count(*) from t1 where match a against ('aaaxxx aaayyy aaazzz' in boolean mode);
|
||
count(*)
|
||
765
|
||
select count(*) from t1 where match a against ('aaax*' in boolean mode);
|
||
count(*)
|
||
260
|
||
select count(*) from t1 where match a against ('aaay*' in boolean mode);
|
||
count(*)
|
||
250
|
||
select count(*) from t1 where match a against ('aaa*' in boolean mode);
|
||
count(*)
|
||
765
|
||
insert t1 (a) values ('aaaxxx'),('aaayyy');
|
||
insert t1 (a) values ('aaazzz'),('aaazzz'),('aaazzz'),('aaazzz'),('aaazzz');
|
||
select count(*) from t1 where match a against ('aaaxxx');
|
||
count(*)
|
||
261
|
||
select count(*) from t1 where match a against ('aaayyy');
|
||
count(*)
|
||
251
|
||
select count(*) from t1 where match a against ('aaazzz');
|
||
count(*)
|
||
260
|
||
insert t1 (a) values ('aaaxxx 000000');
|
||
select count(*) from t1 where match a against ('000000');
|
||
count(*)
|
||
1
|
||
delete from t1 where match a against ('000000');
|
||
select count(*) from t1 where match a against ('000000');
|
||
count(*)
|
||
0
|
||
select count(*) from t1 where match a against ('aaaxxx');
|
||
count(*)
|
||
261
|
||
delete from t1 where match a against ('aaazzz');
|
||
select count(*) from t1 where match a against ('aaaxxx' in boolean mode);
|
||
count(*)
|
||
261
|
||
select count(*) from t1 where match a against ('aaayyy' in boolean mode);
|
||
count(*)
|
||
251
|
||
select count(*) from t1 where match a against ('aaazzz' in boolean mode);
|
||
count(*)
|
||
0
|
||
select count(*) from t1 where a = 'aaaxxx';
|
||
count(*)
|
||
261
|
||
select count(*) from t1 where a = 'aaayyy';
|
||
count(*)
|
||
251
|
||
select count(*) from t1 where a = 'aaazzz';
|
||
count(*)
|
||
0
|
||
insert t1 (a) values ('aaaxxx 000000');
|
||
select count(*) from t1 where match a against ('000000');
|
||
count(*)
|
||
1
|
||
update t1 set a='aaazzz' where match a against ('000000');
|
||
select count(*) from t1 where match a against ('aaaxxx' in boolean mode);
|
||
count(*)
|
||
261
|
||
select count(*) from t1 where match a against ('aaazzz' in boolean mode);
|
||
count(*)
|
||
1
|
||
update t1 set a='aaazzz' where a = 'aaaxxx';
|
||
update t1 set a='aaaxxx' where a = 'aaayyy';
|
||
select count(*) from t1 where match a against ('aaaxxx' in boolean mode);
|
||
count(*)
|
||
251
|
||
select count(*) from t1 where match a against ('aaayyy' in boolean mode);
|
||
count(*)
|
||
0
|
||
select count(*) from t1 where match a against ('aaazzz' in boolean mode);
|
||
count(*)
|
||
262
|
||
drop table t1;
|
||
set names utf8;
|
||
create table t1(a text,fulltext(a)) collate=utf8_swedish_ci;
|
||
insert into t1 values('test test '),('test'),('test'),('test'),
|
||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test');
|
||
delete from t1 limit 1;
|
||
truncate table t1;
|
||
insert into t1 values('ab c d');
|
||
update t1 set a='ab c d';
|
||
select * from t1 where match a against('ab c' in boolean mode);
|
||
a
|
||
drop table t1;
|
||
set names latin1;
|
||
CREATE TABLE t1(a VARCHAR(255) CHARACTER SET gbk, FULLTEXT(a));
|
||
SET NAMES utf8;
|
||
INSERT INTO t1 VALUES(0xF043616161),(0xBEF361616197C22061616161);
|
||
SELECT HEX(a) FROM t1 WHERE MATCH(a) AGAINST(0x97C22061616161 IN BOOLEAN MODE);
|
||
HEX(a)
|
||
BEF361616197C22061616161
|
||
DELETE FROM t1 LIMIT 1;
|
||
CHECK TABLE t1;
|
||
Table Op Msg_type Msg_text
|
||
test.t1 check status OK
|
||
SET NAMES latin1;
|
||
DROP TABLE t1;
|