mysql 5.6+ 全文索引仅支持 innodb 和 myisam;非此两类引擎(如 memory、archive)执行 add fulltext 会报错 error 1214;innodb 必须用 alter table ... add fulltext 或建表时定义,不支持 create index 单独添加;全文检索必须用 match ... against,like/regexp 不走索引;中文需 ngram 插件或应用层分词。

MySQL 5.6+ 全文索引只支持 InnoDB 和 MyISAM 表
全文索引不是所有存储引擎都支持。如果你建表时用的是 ENGINE=MEMORY、ARCHIVE 或 CSV,执行 ALTER TABLE ... ADD FULLTEXT 会直接报错:ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes。必须先确认表引擎:
SHOW CREATE TABLE your_table_name;
如果不是 InnoDB 或 MyISAM,需先转换:
ALTER TABLE your_table_name ENGINE = InnoDB;
创建全文索引的三种方式要分清场景
全文索引不能通过 CREATE INDEX 单独添加(除非是 MyISAM),InnoDB 必须在 CREATE TABLE 时声明,或用 ALTER TABLE ... ADD FULLTEXT —— 但后者有隐含限制:
- 单列全文索引:直接
ADD FULLTEXT(column_name) - 多列联合全文索引:必须一次性指定所有列,比如
ADD FULLTEXT(title, content);之后不能再单独给content加一个新全文索引 - 已存在数据的表加全文索引,InnoDB 会重建索引,期间写入阻塞,大表慎操作
推荐做法:建表时就定义好,避免后期迁移成本。
全文检索语句写法和默认行为容易出错
用 MATCH ... AGAINST 是唯一合法方式,LIKE '%xxx%' 或 REGEXP 不走全文索引。常见错误包括:
安全锁锁芯类网站模板(响应式)是一个响应式优雅大气的集团企业网站模板,自带内核安装即用,响应式模板,图片文本均已可视化,简单后台易上手。支持多种内容模型,可按需添加。模板特点: 1、安装即用,自带人人站CMS内核及企业站展示功能(产品,新闻,案例展示等),并可根据需要增加表单 搜索等功能(自带模板) 2、支持响应式 3、前端banner轮播图文本均已进行可视化配置 4、伪静态页面生成 5、支持内容
- 漏写
IN NATURAL LANGUAGE MODE或IN BOOLEAN MODE,MySQL 8.0+ 默认是自然语言模式,但低版本可能因 SQL mode 影响解析 - 搜索词少于
ft_min_word_len(默认 4)会被忽略,比如搜 “php” 返回空 —— 需改配置并重启 MySQL,再重建索引 -
AGAINST('word1 word2')在自然语言模式下是“相关性排序”,不是“同时包含”,想精确 AND 要用布尔模式:AGAINST('+word1 +word2' IN BOOLEAN MODE)
中文全文检索必须额外处理分词
MySQL 原生不支持中文分词,ft_min_word_len=1 也无效,因为它是按空白和标点切词,中文无空格就整个字段当一个“词”。结果就是:
- 建了全文索引,
MATCH ... AGAINST永远返回空或极低相关性 - 即使把字段全转成拼音或加空格,也不符合实际业务分词逻辑
真正可用的方案只有两个:
- 用
ngram插件(MySQL 5.7.6+ 内置):设置ft_parser=ngram,建索引时指定,且ngram_token_size控制字元长度(中文一般设 2) - 应用层分词(如结巴分词)+ 倒排索引维护,绕开 MySQL 全文能力
ngram 示例:
SET GLOBAL ngram_token_size = 2;<br>ALTER TABLE article ADD FULLTEXT INDEX ft_title_content (title, content) WITH PARSER ngram;
注意:ngram 索引对短词(如单字)仍不友好,且无法支持同义词、拼音容错等高级需求。









