高手请进,oracle单个字符不匹配?很怪异的问题!

chinawit 2004-11-15 04:26:47
请问各位高手,为什么oracle单个字符查询会出现毫不相干的结果集?
比如
SELECT * FROM TEMP WHERE TEMP_MC LIKE '%那%' ORDER BY NCP_DM
这里查询条件是“那”但是出现很多没有“那”的结果!为什么呢?
但是使用多个字就不会有这样的问题!
我估计字符集的问题,我的oracle字符集是AMERICAN_AMERICA.US7ASCII
请问哪位高手能解决我的问题?
...全文
294 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
beepbug 2004-11-16
  • 打赏
  • 举报
回复
zmgowin指出了问题所在。不光是Oracle,其它许多系统都存在着这个问题。如果自己编一个模糊查找函数,可以解决这个问题。办法很简单,你在比对时留意一下字符边界就行了。
chinawit 2004-11-16
  • 打赏
  • 举报
回复
还是没人知道么?
chinawit 2004-11-15
  • 打赏
  • 举报
回复
不改字符集,又没解决方法?
lcz022 2004-11-15
  • 打赏
  • 举报
回复
改成GB字符集就可以的了,Oracle在支持中文这方面不是太好。
chinawit 2004-11-15
  • 打赏
  • 举报
回复
先谢谢大家!
我们都知道是字符集的问题,但是大家谁有办法解决呢?比如改个什么字符集?呵呵
liuyi8903 2004-11-15
  • 打赏
  • 举报
回复
我怀疑我上次遇到一个.
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)

的问题可能也跟此有关.
datafrog 2004-11-15
  • 打赏
  • 举报
回复
中文支持的问题,我也遇到过。如果你用pb的话,在引号里面删除字,半个一删,尝试从不同的地方删,你肯定可以变出一个“ 那”字的,我试过。具体解决我目前也在寻找,尽量不把中文放在条件中。
chinawit 2004-11-15
  • 打赏
  • 举报
回复
你把这几条记录加进去试试,这些都是名称

新鲜或冷藏的茄果类蔬菜

其他新鲜或冷藏的茄果类蔬菜

干的芹菜
zmgowin 2004-11-15
  • 打赏
  • 举报
回复
转:
汉字模糊匹配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,59

Typ=96 Len=2: 208,183

SQL> select 1 from dual where '仔服' like '%'||'蟹'||'%';

1
----------
1

SQL>



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 的 全文检索。

bluelamb 2004-11-15
  • 打赏
  • 举报
回复
不会呀
SQL> select t.* from table1 t where name like '%那%';

NUM1 NUM2 NUM3 NAME
---------- ---------- ---------- --------------------
1 1 1 a好那么a

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧