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)

idstr1
6卡拉是条狗

2、用INSTR 函数。

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

query result(1 records)

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

insert into a1(str1) values('我唉你,卡拉,wo ai ni,I love you');

query result(2 records)

idstr1
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)

idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra
1SIMPLEa1ALL(NULL)(NULL)(NULL)(NULL)8Using where



3、以前的那些所谓的加binary 来查询的,完全是因为编码不对所致,如果遇到中文查不到的话,应该立即检查你的
show variables like '%char%';
的执行结果。
或者说你的MYSQL版本太低的话建议升级到最新稳定版。
binary关键字只在区分大小写或者你要按二进制查询的时候有效。





select * from a1 where binary str1 like '%I love%';

query result(2 records)

idstr1
4I 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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值