MySQL模糊查询,还在使用 like +%

85 阅读1分钟
# 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 ('南山区');
# 执行上面2sql会发现,第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;