Chinaunix首页 | 论坛 | 博客
  • 博客访问: 209255
  • 博文数量: 28
  • 博客积分: 128
  • 博客等级: 民兵
  • 技术积分: 400
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-19 13:05
个人简介

生活的内容不全是工作,工作只是生活的一部分;享受生活,热爱工作!

文章分类
文章存档

2015年(1)

2014年(23)

2011年(4)

分类: Sybase

2014-09-17 08:59:16

最近有用户反应,一条正常的SQL查询出来的结果不对。如下:
select ID_INTL_IP,NAM_IP  from tmp_jgkh_all where NAM_IP like '%分行%' and ID_INTL_IP = '66345'
ID_INTL_IP            NAM_IP
66345                 汽车用品中心

从查询结果来看确实存在问题,之后得知IQ数据库采用的是ISO_BINENG 字符集。

执行查询时,搜索条件是按字节编码进行的,从上述情况来看,"分行"和"汽车用品中心"的16进制可能有相同的编码。

后来经过确认:分行 B7 D6 D0 D0   品中心 C6 B7 D6 DO D0 C4

也就是说"品"的后半个字节编码和前"中"的前半个字节编码组成了"分","中"的后半个字节编码和"心"的前半个字节编码组成了"行"。

因此在使用like 时,如果用到了全匹配"%%",就会出现上述情况,使用半匹配则不会出现上述情况。

经过测试,如果IQ数据库采用CP936字符集,则不会出现该问题;建议使用CP936字符集,避免出现上述类似问题。

注: 测试utf8字符集和iso_bineng结果一样,不建议使用。


阅读(2100) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~