比如我用--select address from table1 where address like “%月牙胡同25号%" ----查询,但实际上该字段值是“月芽胡同25号”,所以我查不到,请问怎样才能匹配到

解决方案 »

  1.   

    字符集的问题。
    你先show variables like 'char%';
    看看什么字符集。
    set names 'gbk';
    之后,插入一条再select试试:
    mysql> set names 'gbk';
    Query OK, 0 rows affected (0.00 sec)mysql> insert into table1 values('月芽胡同25号');
    Query OK, 1 row affected (0.00 sec)mysql> select address from table1 where address like '%月芽胡同25号%';
    +--------------+
    | address      |
    +--------------+
    | 月芽胡同25号 |
    +--------------+
    1 row in set (0.00 sec)mysql> select address from table1 where address like binary '%月芽胡同25号%';
    +--------------+
    | address      |
    +--------------+
    | 月芽胡同25号 |
    +--------------+
    1 row in set (0.00 sec)
      

  2.   

    这个可以,但是不通用.
    select address from table1 where soundex(address)=soundex('%月牙胡同25号%')
      

  3.   

    我看错题目了。汗。。月牙胡同, 月芽胡同像这类匹配,应该建立一个同义(音)词表,直接使用 like ... or like ... 进行查询。
    跟搜索引擎中的同义词表有些类似。
      

  4.   

    soundex对汉字和数字返回值是一样的,貌似没法用,我想在postgresql下写,有人提示我用正则匹配,但是我不知道匹配语句怎么写
      

  5.   


      mysql>select address  from table1 where address REGEXP ".[月][u4E00-u9FA5]{1}胡同25号.";这个的话就是直接不考虑 牙 这个多音字了 , 你看这样可以不咯。
      

  6.   

    正确的sql:
    mysql>select address from table1 where address REGEXP ".[月][^u4E00-u9FA5]{1}胡同25号."