分区表不支持全文检索。请参阅 第 26.6 节,“分区限制和局限性”。
大多数多字节字符集都可以使用全文检索。例外是对于 Unicode,可以使用
utf8mb3或utf8mb4字符集,但不能使用ucs2字符集。虽然FULLTEXT索引不能用于ucs2列,但可以在没有此类索引的ucs2列上执行IN BOOLEAN MODE搜索。utf8mb3的备注也适用于utf8mb4,而ucs2的备注也适用于utf16、utf16le和utf32。汉语和日语等表意文字语言没有词语分隔符。因此,内置全文解析器无法确定这些语言和其他此类语言中的词语的开始和结束位置。
提供了一个基于字符的 ngram 全文解析器,它支持中文、日语和韩语 (CJK),以及一个支持日语的基于词语的 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操作,插入的字符串将被分词并分解为单个词语。然后,在事务提交时,这些单个词语将被添加到全文索引表中。因此,全文检索仅返回已提交的数据。'%' 字符不是全文检索支持的通配符字符。