首页 > 解决方案 > 删除索引后恢复mysql区分大小写的全文搜索

问题描述

我有一个数据库,我在其中删除了列上的全文索引。重新添加后,我无法恢复相同的原始行为。

这是一个例子。

我创建表并将字符集设置为utf8_bin. 我还添加了全文索引:

CREATE TABLE testtable (
             `Date` timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL,
             `Headline` VARCHAR(256) CHARACTER SET utf8 NOT NULL,
             `Description` text CHARACTER SET utf8 NOT NULL,
            PRIMARY KEY (`Headline`)
            );
ALTER TABLE testtable CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
ALTER TABLE testtable ADD FULLTEXT (Headline);

我添加了一些虚拟数据:

INSERT INTO testtable (Headline,Description) VALUES ("the story of how an apple fell from the tree",""); 
INSERT INTO testtable (Headline,Description) VALUES ("Apple did something blah",""); 

现在,如果我搜索:

SELECT `Date`,`Headline` FROM testtable WHERE MATCH (Headline) AGAINST ('apple' IN BOOLEAN MODE);
'2020-02-19 17:16:05', 'the story of how an apple fell from the tree'

SELECT `Date`,`Headline` FROM testtable WHERE MATCH (Headline) AGAINST ('Apple' IN BOOLEAN MODE);
'2020-02-19 17:18:38', 'Apple did something blah'

太好了,这行得通,这就是我想要的结果

现在让我们删除索引,重新添加它,然后再试一次:

DROP INDEX Headline ON testtable;
#ALTER TABLE testtable CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; # I also tried this with no difference
ALTER TABLE testtable ADD FULLTEXT (Headline);
SELECT `Date`,`Headline` FROM testtable WHERE MATCH (Headline) AGAINST ('Apple' IN BOOLEAN MODE);

给出null作为响应,但搜索apple返回两行。

所以问题是,这里发生了什么,更重要的是,我如何让表格恢复原状:一个区分大小写的全文索引,它给我单独的结果Appleapple

(使用 Mysql 5.7,带 InnoDB 引擎)

谢谢您的帮助!

标签: mysqldatabase

解决方案


https://dev.mysql.com/doc/refman/5.6/en/fulltext-natural-language.html

默认情况下,搜索以不区分大小写的方式执行。要执行区分大小写的全文搜索,请对索引列使用二进制排序规则。例如,可以为使用 latin1 字符集的列分配 latin1_bin 排序规则,以使其在全文搜索中区分大小写。


推荐阅读