# 1、创建表并创建全文索引fulltext
CREATE TABLE student(
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name VARCHAR(50),
addr VARCHAR(100),
FULLTEXT (addr)
) ENGINE = InnoDB CHARACTER SET utf8mb4;
# 2、插入数据
INSERT INTO student(name, addr) VALUES('zhangsan' ,'Futian District, Shenzhen City, Guangdong Province');
INSERT INTO student(name, addr) VALUES('张三' ,'广东省深圳市南山区' );
INSERT INTO student(name, addr) VALUES('李四' ,'广东省深圳市福田区' );
# 3、模糊查询数据
SELECT * FROM student WHERE MATCH (addr) AGAINST ('Shenzhen');
SELECT * FROM student WHERE MATCH (addr) AGAINST ('南山区');
# 执行上面2条sql会发现,第1条有结果,第2条没有结果?
## 常见问题
一、似乎mysql全文索引不支持中文一样,那mysql全文索引如何支持中文查询?答案是:ngram中文插件。
MySQL 5.7开始,MySQL内置了ngram全文检索插件,用来支持中文分词,并且对MyISAM和InnoDB引擎有效。
# WITH PARSER ngram
CREATE TABLE student(
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name VARCHAR(50),
addr VARCHAR(100),
FULLTEXT (addr) WITH PARSER ngram
) ENGINE = InnoDB CHARACTER SET utf8mb4;