用PHp+mysql模糊查询时
select * from company where company_name like BINARY '%田%'
只能查出部分结果,比如能查出:“田园”“种田”“田田”
却查不出:“田里”“出田”等;
去掉或加上BINARY也是一样,网上mysql模糊查询大部分的问题是查出很多不相关的数据,而我碰到的情况是查出的都是相关的,但就是不全!
select * from company where company_name like BINARY '%田%'
只能查出部分结果,比如能查出:“田园”“种田”“田田”
却查不出:“田里”“出田”等;
去掉或加上BINARY也是一样,网上mysql模糊查询大部分的问题是查出很多不相关的数据,而我碰到的情况是查出的都是相关的,但就是不全!
这是我实验的结果。
mysql> select id from tt;
+------+
| id |
+------+
| 田园 |
| 种田 |
| 田田 |
| 田里 |
| 出田 |
| 种菜 |
+------+
mysql> select id from tt where id like '%田%';
+------+
| id |
+------+
| 田园 |
| 种田 |
| 田田 |
| 田里 |
| 出田 |
+------+
mysql> select id from tt where binary id like '%田%';
Empty setmysql> select id from tt where id like binary '%田%';
Empty set
最后两行是没有结果的,我也菜鸟,希望高人能解答一下。
show varialbes like 'char%';看一下你的字符集比较规则。
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | gbk |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | gbk |
| character_set_system | utf8
mysql> show create table tt;
+-------+---------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------------------------------------------------+
| tt | CREATE TABLE `tt` (
`id` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk |
mysql> select * from tt where BINARY id like BINARY '%田%'; Empty set为什么一定要用binary呢???
mysql> select id from tt where id like '%田%';
+------+
| id |
+------+
| 田园 |
| 种田 |
| 田田 |
| 田里 |
| 出田 |
这不是也能查出来么????
但如果你是不同的字符集,则会有问题。
gb2312 的 田 是 CCEF ,但 utf8 则 完全不同了。
select * from company where company_name like BINARY '%田%'
只能查出部分结果,比如能查出:“田园”“种田”“田田”
却查不出:“田里”“出田”等;
去掉或加上BINARY也是一样,网上mysql模糊查询大部分的问题是查出很多不相关的数据,而我碰到的情况是查出的都是相关的,但就是不全!数据库字段:gbk_bin
页面编码:gb2312
mysql> select * from company where company_name like '%田%'
mysql> show create table company ;mysql> show variables like 'char%';
+--------------------------+-------
| Variable_name | Value
+--------------------------+-------
| character_set_client | latin1
| character_set_connection | latin1
| character_set_database | latin1
| character_set_filesystem | binary
| character_set_results | latin1
| character_set_server | latin1
| character_set_system | utf8
| character_sets_dir | C:\Pro
+--------------------------+-------
8 rows in set (0.00 sec)mysql> show variables like 'coll%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)mysql>
如果不正确,把结果贴出来。