MySQL数据库中文模糊检索问题

我在这里谈一下 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)

id str1
6 卡拉是条狗

2、用INSTR 函数。

select * from a1 where instr(str1,'卡拉') != 0;

query result(1 records)

id str1
6 卡拉是条狗
如果是中英文混合的记录,同样适合。

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,如需转载请自行联系原作者

上一篇:Web版RSS阅读器(四)——定制自己的Rss解析库myrsslib4j


下一篇:windows7企业版 IIS常见问题