我在MySQL数据库中有一个表,它具有以下结构:
CREATE TABLE `papers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(1000) COLLATE utf8_bin DEFAULT NULL,
`booktitle` varchar(300) COLLATE utf8_bin DEFAULT NULL,
`journal` varchar(300) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `title_fulltext` (`title`),
FULLTEXT KEY `booktitle_fulltext` (`booktitle`),
FULLTEXT KEY `journal_fulltext` (`journal`)
) ENGINE=MyISAM AUTO_INCREMENT=1601769 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
现在我知道在列标题中,在数百万行的某个地方,有一行包含字符串
nFOIL: Integrating Naïve Bayes and FOIL.
我想找
my_string = "nFOIL: integrating Naïve Bayes and FOIL"
找到合适的行。您会发现它必须是不区分大小写的搜索,并且查询中缺少最后的点。我该如何实现呢?
我试过
SELECT id FROM papers WHERE UPPER(title) LIKE %s
并在python中将my_string转换为大写,并在my_string的末尾放置一个“%”,但这并不能解决这个问题。它也不起作用。 =)
感谢您的任何建议!
答案 0 :(得分:2)
我看到你添加了FULLTEXT索引,虽然你已经知道了MATCH AGAINST MySQL的语法。
你应该试试
SELECT id FROM papers
WHERE MATCH (title,booktitle,journal) AGAINST ('nFOIL: integrating Naïve Bayes and FOIL' IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION);
答案 1 :(得分:0)
在utf8_general_ci中更改整理。 这样,您的搜索将不区分大小写。