我有两个表:MySQL的对阵没有返回区分大小写的结果
CREATE TABLE IF NOT EXISTS `test1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`bucket_id` int(10) unsigned NOT NULL COMMENT 'folder this component belongs to',
`test1_name` varchar(81) NOT NULL COMMENT 'Name of this component',
`test1_desc` varchar(1024) NOT NULL COMMENT 'Component Description',
PRIMARY KEY (`id`),
FULLTEXT KEY `test1_search` (`test1_name`,`test1_desc`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
CREATE TABLE IF NOT EXISTS `bucket` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`bkt_name` varchar(81) NOT NULL COMMENT 'The name of this bucket',
`bkt_desc` varchar(1024) NOT NULL COMMENT 'A description of this bucket',
`bkt_keywords` varchar(512) DEFAULT NULL COMMENT 'keywords for searches',
PRIMARY KEY (`id`),
FULLTEXT KEY `fldr_search` (`bkt_desc`,`bkt_keywords`,`bkt_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;
桶仅仅是一个持有人在test1的包含所有将进入桶中的东西。例如:
INSERT INTO `bucket` (`id`, `bkt_name`, `bkt_desc`, `bkt_keywords`) VALUES
(1, 'Simpsons', 'The Simpsons Cartoon Family was first successful adult cartoon series', 'Homer, Marge, Lisa and Bart'),
(2, 'Griffins', 'The family from the popular family guy series', 'Peter, Lois, Meg, Chris, Stewie, Brian');
INSERT INTO `test1` (`id`, `bucket_id`, `bkt_name`, `bkt_desc`) VALUES
(1, 1, 'Homer Simpson', 'Homer the figurative head of the Simpsons Family and is the husband of Marge'),
(2, 2, 'Peter Griffin', 'Peter the figurative head of the Griffin family on the hit TV seriers The family Guy');
现在,使用下面的查询我想看看他的名字,描述或关键字包含搜索项目“家庭”或者其成分包含单词“家庭”)
所有桶到目前为止,我所拥有的就是这个查询,并且它没有返回混合大小写结果,因为在“family”中找不到“Family”。
SELECT *
FROM bucket
RIGHT JOIN test1 ON test1.bucket_id = bucket.id
WHERE
bucket.isvisible > 0 AND
MATCH(bucket.bkt_keywords, bucket.bkt_desc, bucket.bkt_name)
AGAINST('family' IN BOOLEAN MODE) OR
MATCH(test1.test1_name, test1.test1_desc)
AGAINST('family' IN BOOLEAN MODE)
我还应该补充说,所有文本字段都具有utf8_general_ci的排序规则,就像整个MyISAM表一样。
提供的示例在存储桶描述和测试说明中都提供了全部小写的“family”。你能举一个更好的例子来证明你的问题吗? – scwagner
仅供参考,test1的insert语句中的字段名称不正确(应该是'test1_name','test1_desc')。您的SELECT也有bucket.isvisible> 0,它不包含在示例表中。一旦我修复了这两件事情,查询就返回了两行,所以不幸的是我不知道实际问题的原因。 (当然,除非整个东西是红鲱鱼,真正的问题是辛普森行上的bucket.isvisible参数!) –
也可以简化查询,如下所示:SELECT * FROM bucket RIGHT JOIN test1 ON test1 .bucket_id = bucket.id WHERE MATCH(bucket.bkt_keywords,bucket.bkt_desc,bucket.bkt_name,test1.test1_desc,test1.test1_name) 反对('家庭'BOOLEAN模式) –