用PHp+mysql模糊查询时
select * from company where company_name  like BINARY '%田%'
只能查出部分结果,比如能查出:“田园”“种田”“田田”
却查不出:“田里”“出田”等;
去掉或加上BINARY也是一样,网上mysql模糊查询大部分的问题是查出很多不相关的数据,而我碰到的情况是查出的都是相关的,但就是不全!

解决方案 »

  1.   

    楼主的能查出来么??我只知道binary是用于字母大小写区分进行的,你用于汉字干什么???
    这是我实验的结果。
    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
    最后两行是没有结果的,我也菜鸟,希望高人能解答一下。
      

  2.   

    可以先试一下 select * from company where BINARY company_name  like BINARY '%田%';估计是你的字符集设置的问题。show create table company ;
    show varialbes like 'char%';看一下你的字符集比较规则。
      

  3.   

    mysql> show variables 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  | 
    +------+ 
    | 田园 | 
    | 种田 | 
    | 田田 | 
    | 田里 | 
    | 出田 | 
    这不是也能查出来么????
      

  4.   

    你是相同的字符集,所有binary 和 本身的内容没什么差别。
    但如果你是不同的字符集,则会有问题。
    gb2312 的 田 是 CCEF ,但 utf8 则 完全不同了。
      

  5.   

    用PHp+mysql模糊查询时 
    select * from company where company_name  like BINARY '%田%' 
    只能查出部分结果,比如能查出:“田园”“种田”“田田” 
    却查不出:“田里”“出田”等; 
    去掉或加上BINARY也是一样,网上mysql模糊查询大部分的问题是查出很多不相关的数据,而我碰到的情况是查出的都是相关的,但就是不全!数据库字段:gbk_bin
    页面编码:gb2312
      

  6.   

    这样,你先直接用mysql工具连你的数据库,以断定是mysql端的问题,还是php上的问题。进入mysql后,检查
    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>
    如果不正确,把结果贴出来。