我创建了下表。
CREATE TABLE `test` (
`name` VARCHAR(50) NOT NULL,
`id` INT(10) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
FULLTEXT INDEX `name` (`name`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
以下数据
insert into test (name) values('apple');
insert into test (name) values('course');
我正在搜索以下查询。
select * from test where MATCH (name) AGAINST ('apple' IN BOOLEAN MODE);
select * from test where MATCH (name) AGAINST ('course' IN BOOLEAN MODE);
现在问题是第一个选择查询返回正确的行。但第二个查询不返回任何行。我测试了其他的话,他们工作正常。但是如果数据有“课程”这个词,当我们搜索“课程”时,它不会返回任何行。
有人可以帮我解决这个奇怪的问题吗?
答案 0 :(得分:1)
使用like
运算符不是最好吗?
select * from test where name LIKE 'course';
甚至是REGEXP
select * from test where name RegexP 'course';
您可以尝试:
select * from test where MATCH (name) AGAINST ('course*' IN BOOLEAN MODE);
它通常在部分单词搜索中失败最多......所以请求从我们的表中向我们展示一些样本数据。
所以这里是说什么,你需要做什么:)
“从MySQL 5.5.6开始,如果character_set_server是ucs2,utf16或utf32,则使用latin1加载和搜索停用词文件。如果使用FULLTEXT索引创建了任何表,而服务器字符集是ucs2,utf16或utf32 ,它应该使用这个声明进行修复..
REPAIR TABLE tbl_name QUICK;
“
答案 1 :(得分:0)
在您的AGAINST查询中添加“IN BOOLEAN MODE” 喜欢(在BOOLEAN模式中''当然*') 这将完美地运作