我在这里谈一下 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
示例数据:
------ -------------------------------------------------------
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;
(0 row(s)affected)
|
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 '%卡拉%';
|
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)