我有兩個表: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模式) –