不会呀
SQL> select t.* from table1 t where name like '%那%';      NUM1       NUM2       NUM3 NAME
---------- ---------- ---------- --------------------
         1          1          1 a好那么a

解决方案 »

  1.   

    转:
    汉字模糊匹配BUG
    发表人:biti_rainy | 发表时间: 2004年十月25日, 16:00当要求汉字进行模糊匹配的时候,由于oracle是采用存储的字节流进行查找的,所以有存在着一个汉字的后半截和另一个汉字的前半截拼起来正好构成某个汉字。这样则存在着模糊匹配出现错误的可能性。碰巧,今天我在生产数据库应用中遭遇了好几个。我的数据库字符集是US7ASCII ,和字符集是相关的。SQL> select  PRODUCTION_SERVICE from  company where  view_name = '泰兴市佰信纺织有限公司';
    PRODUCTION_SERVICE
    ------------------------------------------------------------------------------------------牛仔布;色织布;弹力牛仔布;竹节牛仔布;彩色牛仔布;提花牛仔布;牛仔服;牛仔裤;纱卡;灯蕊绒;SQL> 
    SQL> select  count(*) 
    from  company
    where view_name = '泰兴市佰信纺织有限公司'
    and PRODUCTION_SERVICE   like '%'||'蟹'||'%';
     
      COUNT(*)
    ---------         1
    SQL> select PRODUCTION_SERVICE, dump(PRODUCTION_SERVICE),dump( '蟹')    from  company
    where view_name = '泰兴市佰信纺织有限公司'
      3    4  ;PRODUCTION_SERVICE
    ------------------------------------------------------------------------DUMP(PRODUCTION_SERVICE)
    ------------------------------------------------------------------------DUMP('蟹')
    ---------------------牛仔布;色织布;弹力牛仔布;竹节牛仔布;彩色牛仔布;提花牛仔布;牛仔服;牛仔裤;纱卡;灯蕊绒;Typ=1 Len=84: 197,163,215,208,178,188,59,201,171,214,175,178,188,59,181,175,193,166,
    197,163,215,208,178,188,59,214,241,189,218,197,163,215,208,178,188,59,178,202,201,171,
    197,163,215,208,178,188,59,204,225,187,168,197,163,215,208,178,188,59,197,163,215,208,
    183,254,59,197,163,215,208,191,227,59,201,180,191,168,59,181,198,200,239,200,222,59Typ=96 Len=2: 208,183SQL> select  1 from  dual  where  '仔服'  like  '%'||'蟹'||'%';         1
    ----------
             1SQL> Oracle is anything :: 评论 (6) :: 链接 :: 引用 (0) 
     [回复] 
    一般的说来,中文的字符集应该是正常的不是中文的字符集,则oracle在匹配的时候不能判别这相临字节是不是同一个字符
    biti_rainy | 26/10/2004, 11:54 
     [回复] 
    那数据库为什么使用US7ASII呢?
    daniel | 26/10/2004, 20:55 
     [回复] 
    数据库为什么使用 US7ASCII ?这个问题,你得要去问 5年前设计系统和创建数据库的人了那时我还不知道什么是oracle :)
    biti_rainy | 27/10/2004, 13:36 
     字符集啊 [回复] 
    早些时候我们这边的数据库不知道使用的什么字符集,现在全给他升级咯^_^
    jametong | 27/10/2004, 13:50 
     [回复] 
    US7ASCII 是7位的; 用来存储中文?字符集始终是很麻烦的事情
    玉面飞龙 | 28/10/2004, 16:13 
     US7ASCII [回复] 
    US7ASCII我们也是使用的。他的特点是进去什么,出来就是什么。所以可以用来在一个表里存储很多种语言。缺点除了鼻涕所说,还有一个就是无法建立 domain index。无法使用oracle 的 全文检索。
      

  2.   

    我怀疑我上次遇到一个.
    java.sql.sqlexception:违反协议
        at oracle.jdbc.dbaccess.dberror.throwsqlexception(dberror.java:134)
        at oracle.jdbc.dbaccess.dberror.throwsqlexcepton(dberror.java:179)
        at oracle.jdbc.dbaccess.dberror.check_error(dberror.java:1160)
        at oracle.jdbc.ttc7.oclose.receive(oclose.java:133)
        at oracle.jdbc.ttc7.ttc7protocol.close(ttc7protocol.java:683)
        at oracle.jdbc.driver.oraclestatement.close(oraclestatement.java:644)的问题可能也跟此有关.
      

  3.   

    改成GB字符集就可以的了,Oracle在支持中文这方面不是太好。
      

  4.   

    zmgowin指出了问题所在。不光是Oracle,其它许多系统都存在着这个问题。如果自己编一个模糊查找函数,可以解决这个问题。办法很简单,你在比对时留意一下字符边界就行了。