我在这里谈一下 MYSQL的中文模糊搜索。
我的MYSQL版本。
version() |
5.1.22-rc-community-log |
这里用到的表:
Table Create Table
------ -------------------------------------------------------
a1 CREATE TABLE `a1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`str1` char(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
示例数据:
set names gbk; insert into a1(str1) values ('靠'),('FUCK'),('fuck'), ('I love your mind.'), ('大话西游'),('卡拉是条狗'), ('没完没了');
(0 row(s)affected)
(0 ms taken)
(7 row(s)affected)
(0 ms taken)
|
如果想要查出有哪条记录包含卡拉的。1、用LIKE 语句 。
select * from a1 where str1 like '%卡拉%';
|
query result(1 records)
2、用INSTR 函数。
select * from a1 where instr(str1,'卡拉') != 0;
|
query result(1 records)
如果是中英文混合的记录,同样适合。
insert into a1(str1) values('我唉你,卡拉,wo ai ni,I love you');
|
query result(2 records)
id |
str1 |
6 |
卡拉是条狗 |
8 |
我唉你,卡拉,wo ai ni,I love you |
这两条语句的效率是一样的。
explain select * from a1 where str1 like '%卡拉%';
explain select * from a1 where instr(str1,'卡拉') != 0;
|
query result(1 records)
id |
select_type |
table |
type |
possible_keys |
key |
key_len |
ref |
rows |
Extra |
1 |
SIMPLE |
a1 |
ALL |
(NULL) |
(NULL) |
(NULL) |
(NULL) |
8 |
Using where |
3、以前的那些所谓的加binary 来查询的,完全是因为编码不对所致,如果遇到中文查不到的话,应该立即检查你的show variables like '%char%';的执行结果。或者说你的MYSQL版本太低的话建议升级到最新稳定版。binary关键字只在区分大小写或者你要按二进制查询的时候有效。
select * from a1 where binary str1 like '%I love%';
|
query result(2 records)
id |
str1 |
4 |
I love your mind. |
8 |
我唉你,卡拉,wo ai ni,I love you |
select * from a1 where binary str1 like '%i love%';
|
(0 row(s)returned)(0 ms taken)
本文转自 david_yeung 51CTO博客,原文链接:http://blog.51cto.com/yueliangdao0608/81402,如需转载请自行联系原作者