mysql - 删除索引后恢复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
返回两行。
所以问题是,这里发生了什么,更重要的是,我如何让表格恢复原状:一个区分大小写的全文索引,它给我单独的结果Apple
和apple
?
(使用 Mysql 5.7,带 InnoDB 引擎)
谢谢您的帮助!
解决方案
https://dev.mysql.com/doc/refman/5.6/en/fulltext-natural-language.html
默认情况下,搜索以不区分大小写的方式执行。要执行区分大小写的全文搜索,请对索引列使用二进制排序规则。例如,可以为使用 latin1 字符集的列分配 latin1_bin 排序规则,以使其在全文搜索中区分大小写。
推荐阅读
- python - 将某些值从一个列表更改为另一个 python
- excel - 复制没有公式的整个 Excel 工作表
- mongodb - Docker 撰写镜像文件夹
- visual-studio-code - VScode:编辑时执行最后一个终端命令的热键?
- facebook - 图 api 在请求 post_id/reactions 时返回空数据数组
- python - 如何使用 pandas 将数据库与表进行比较
- javascript - 如果参数不存在则返回 null
- c++ - 带有 std::initializer_list 参数的非成员函数(/非构造函数上下文)的重载解析
- node.js - 如何在 Node.js 中发送带有字符串的发布请求?
- sql - 通过从 table1 获取值来更新 table2