1SET NAMES utf8mb4; 2# 3# MDEV-11233 CREATE FULLTEXT INDEX with a token 4# longer than 127 bytes crashes server 5# 6CREATE TABLE t(t TEXT CHARACTER SET utf8mb3) ENGINE=InnoDB; 7INSERT INTO t SET t=REPEAT(CONCAT(REPEAT(_utf8mb3 0xE0B987, 4), REPEAT(_utf8mb3 0xE0B989, 5)), 5); 8INSERT INTO t SET t=REPEAT(_utf8 0xefbc90,84); 9INSERT INTO t SET t=REPEAT('befor',17); 10INSERT INTO t SET t='BeforeTheIndexCreation'; 11CREATE FULLTEXT INDEX ft ON t(t); 12INSERT INTO t SET t='this was inserted after creating the index'; 13INSERT INTO t SET t=REPEAT(_utf8 0xefbc91,84); 14INSERT INTO t SET t=REPEAT('after',17); 15INSERT INTO t SET t=REPEAT(_utf8mb3 0xe794b2e9aaa8e69687, 15); 16# The data below is not 3-byte UTF-8, but 4-byte chars. 17INSERT IGNORE INTO t SET t=REPEAT(_utf8mb4 0xf09f9695, 84); 18Warnings: 19Warning 1366 Incorrect string value: '\xF0\x9F\x96\x95\xF0\x9F...' for column `test`.`t`.`t` at row 1 20INSERT IGNORE INTO t SET t=REPEAT(_utf8mb4 0xf09f9696, 85); 21Warnings: 22Warning 1366 Incorrect string value: '\xF0\x9F\x96\x96\xF0\x9F...' for column `test`.`t`.`t` at row 1 23SELECT COUNT(*) FROM t WHERE MATCH t AGAINST 24(REPEAT(CONCAT(REPEAT(_utf8mb3 0xE0B987, 4), REPEAT(_utf8mb3 0xE0B989, 5)), 5)); 25COUNT(*) 261 27SELECT COUNT(*) FROM t WHERE MATCH t AGAINST ('BeforeTheIndexCreation'); 28COUNT(*) 291 30SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT('befor',17)); 31COUNT(*) 320 33SELECT COUNT(*) FROM t WHERE MATCH t AGAINST ('after'); 34COUNT(*) 351 36SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT('after',17)); 37COUNT(*) 380 39SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8 0xefbc90, 83)); 40COUNT(*) 410 42SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8 0xefbc90, 84)); 43COUNT(*) 441 45SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8 0xefbc90, 85)); 46COUNT(*) 470 48SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8 0xefbc91, 83)); 49COUNT(*) 500 51SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8 0xefbc91, 84)); 52COUNT(*) 531 54SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8 0xefbc91, 85)); 55COUNT(*) 560 57SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8mb4 0xf09f9695, 83)); 58COUNT(*) 590 60SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8mb4 0xf09f9695, 84)); 61COUNT(*) 620 63SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8mb4 0xf09f9696, 84)); 64COUNT(*) 650 66SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8mb4 0xf09f9696, 85)); 67COUNT(*) 680 69SELECT * FROM t; 70t 71็็็็้้้้้็็็็้้้้้็็็็้้้้้็็็็้้้้้็็็็้้้้้ 72000000000000000000000000000000000000000000000000000000000000000000000000000000000000 73beforbeforbeforbeforbeforbeforbeforbeforbeforbeforbeforbeforbeforbeforbeforbeforbefor 74BeforeTheIndexCreation 75this was inserted after creating the index 76111111111111111111111111111111111111111111111111111111111111111111111111111111111111 77afterafterafterafterafterafterafterafterafterafterafterafterafterafterafterafterafter 78甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文 79???????????????????????????????????????????????????????????????????????????????????? 80????????????????????????????????????????????????????????????????????????????????????? 81SELECT len,COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS where name='word' GROUP BY len; 82len COUNT(*) 83252 6 84DROP TABLE t; 85CREATE TABLE t(t TEXT CHARACTER SET utf8mb4) ENGINE=InnoDB; 86INSERT INTO t SET t=REPEAT(_utf8mb3 0xe794b2e9aaa8e69687, 15); 87INSERT INTO t SET t=REPEAT(_utf8 0xefbc90,84); 88INSERT INTO t SET t=REPEAT('befor',17); 89INSERT INTO t SET t='BeforeTheIndexCreation'; 90CREATE FULLTEXT INDEX ft ON t(t); 91INSERT INTO t SET t='this was inserted after creating the index'; 92INSERT INTO t SET t=REPEAT(_utf8 0xefbc91,84); 93INSERT INTO t SET t=REPEAT('after',17); 94INSERT INTO t SET t=REPEAT(concat(repeat(_utf8mb3 0xE0B987, 4), repeat(_utf8mb3 0xE0B989, 5)), 5); 95INSERT INTO t SET t=REPEAT(_utf8mb4 0xf09f9695, 84); 96# The token below exceeds the 84-character limit. 97INSERT INTO t SET t=REPEAT(_utf8mb4 0xf09f9696, 85); 98SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8mb3 0xe794b2e9aaa8e69687, 15)); 99COUNT(*) 1001 101SELECT COUNT(*) FROM t WHERE MATCH t AGAINST ('BeforeTheIndexCreation'); 102COUNT(*) 1031 104SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT('befor',17)); 105COUNT(*) 1060 107SELECT COUNT(*) FROM t WHERE MATCH t AGAINST ('after'); 108COUNT(*) 1091 110SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT('after',17)); 111COUNT(*) 1120 113SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8 0xefbc90, 83)); 114COUNT(*) 1150 116SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8 0xefbc90, 84)); 117COUNT(*) 1181 119SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8 0xefbc90, 85)); 120COUNT(*) 1210 122SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8 0xefbc91, 83)); 123COUNT(*) 1240 125SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8 0xefbc91, 84)); 126COUNT(*) 1271 128SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8 0xefbc91, 85)); 129COUNT(*) 1300 131SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8mb4 0xf09f9695, 83)); 132COUNT(*) 1330 134SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8mb4 0xf09f9695, 84)); 135COUNT(*) 1360 137SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8mb4 0xf09f9696, 84)); 138COUNT(*) 1390 140SELECT COUNT(*) FROM t WHERE MATCH t AGAINST (REPEAT(_utf8mb4 0xf09f9696, 85)); 141COUNT(*) 1420 143SELECT * FROM t; 144t 145甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文甲骨文 146000000000000000000000000000000000000000000000000000000000000000000000000000000000000 147beforbeforbeforbeforbeforbeforbeforbeforbeforbeforbeforbeforbeforbeforbeforbeforbefor 148BeforeTheIndexCreation 149this was inserted after creating the index 150111111111111111111111111111111111111111111111111111111111111111111111111111111111111 151afterafterafterafterafterafterafterafterafterafterafterafterafterafterafterafterafter 152็็็็้้้้้็็็็้้้้้็็็็้้้้้็็็็้้้้้็็็็้้้้้ 153 154 155SELECT len,COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS where name='word' GROUP BY len; 156len COUNT(*) 157336 6 158DROP TABLE t; 159CREATE TABLE t(t TEXT CHARACTER SET latin1, FULLTEXT INDEX(t)) 160ENGINE=InnoDB; 161SELECT len,COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS where name='word' GROUP BY len; 162len COUNT(*) 16384 6 164DROP TABLE t; 165# 166# MDEV-17923 Assertion memcmp(field, field_ref_zero, 7) failed in 167# trx_undo_page_report_modify upon optimizing table 168# under innodb_optimize_fulltext_only 169# 170CREATE TABLE t1 (f1 TEXT, f2 TEXT, FULLTEXT KEY (f2)) ENGINE=InnoDB; 171INSERT INTO t1 (f1) VALUES ('foo'),('bar'); 172DELETE FROM t1 LIMIT 1; 173ALTER TABLE t1 ADD FULLTEXT KEY (f1); 174SET @optimize_fulltext.save= @@innodb_optimize_fulltext_only; 175SET GLOBAL innodb_optimize_fulltext_only= 1; 176OPTIMIZE TABLE t1; 177Table Op Msg_type Msg_text 178test.t1 optimize status OK 179DROP TABLE t1; 180SET GLOBAL innodb_optimize_fulltext_only= @optimize_fulltext.save; 181# 182# MDEV-24403 Segfault on CREATE TABLE with explicit FTS_DOC_ID_INDEX by multiple fields 183# 184create table t1 ( 185f1 int, f2 text, 186FTS_DOC_ID bigint unsigned not null, 187unique key FTS_DOC_ID_INDEX(FTS_DOC_ID, f1), 188fulltext (f2)) 189engine=innodb; 190ERROR 42000: Incorrect index name 'FTS_DOC_ID_INDEX' 191