分区表不支持全文搜索。请参阅 第 26.6 节 “分区限制”。
大多数多字节字符集均可使用全文搜索。但 Unicode 除外,可以使用
utf8mb3
或utf8mb4
字符集,但不能使用ucs2
字符集。尽管不能使用ucs2
列上的FULLTEXT
索引,但可以在没有此类索引的ucs2
列上执行IN BOOLEAN MODE
搜索。utf8mb3
的说明也适用于utf8mb4
,ucs2
的说明也适用于utf16
、utf16le
和utf32
。中文和日语等表意语言没有单词分隔符。因此,内置的全文解析器 无法确定单词在这些语言和其他此类语言中的起始和结束位置。
提供了一个支持中文、日语和韩语 (CJK) 的基于字符的 ngram 全文解析器,以及一个支持日语的基于单词的 MeCab 解析器插件,供与
InnoDB
和MyISAM
表一起使用。尽管支持在单个表中使用多个字符集,但
FULLTEXT
索引中的所有列都必须使用相同的字符集和排序规则。MATCH()
列列表必须与表中某些FULLTEXT
索引定义中的列列表完全匹配,除非此MATCH()
在MyISAM
表上为IN BOOLEAN MODE
。对于MyISAM
表,可以在未编制索引的列上执行布尔模式搜索,但速度可能会很慢。AGAINST()
的参数必须是在查询评估期间保持不变的字符串值。例如,这排除了表列,因为它对每一行可能都不同。MATCH()
的参数不能使用汇总列。与非
FULLTEXT
搜索相比,FULLTEXT
搜索的索引提示更有限。请参阅 第 10.9.4 节 “索引提示”。对于
InnoDB
,所有涉及具有全文索引的列的 DML 操作(INSERT
、UPDATE
、DELETE
)都在事务提交时处理。例如,对于INSERT
操作,将对插入的字符串进行标记化并分解成单个单词。然后在提交事务时将各个单词添加到全文索引表中。因此,全文搜索只返回已提交的数据。'%' 字符不是全文搜索支持的通配符。