现手上有一ASP.NET项目,要求对SQLServer和Oracle支持,现遇到一个问题:Oracle在查询时区分大小写如表T中有字段C1,有1记录,C1的值为ABc,在检索时Select C1 from T where C1='abc'
或者
Select C1 from T where C1 like 'ab%'都不能检索到这条记录,在SQLServer中都可以正常检索出来目前已知二种解决方案:
第一种、改动SQL语句,查询语句中对字段名和检查条件都加UPPER或LOWERSelect C1 from T where UPPER(C1)=UPPER('abc')
或者
Select C1 from T where UPPER(C1) like UPPER('abc')的确可以查询到记录,但存在以下问题:
(1)原默认索引不能使用,必须要建函数索引
(2)需要改动代码,工作量很大第二种:在Oracle10G以上版本,在查询时,执行以下语句ALTER SESSION SET NLS_COMP=ANSI;
ALTER SESSION SET NLS_SORT=binary_ci;再执行查询语句,对Select C1 from T where C1='abc',可以查询到记录,但对Select C1 from T where C1 like 'ab%',还是查询不到记录
现请问有没有其他的解决方案,能够方便的解决这种问题,最好是通过DB级设置解决
或者
Select C1 from T where C1 like 'ab%'都不能检索到这条记录,在SQLServer中都可以正常检索出来目前已知二种解决方案:
第一种、改动SQL语句,查询语句中对字段名和检查条件都加UPPER或LOWERSelect C1 from T where UPPER(C1)=UPPER('abc')
或者
Select C1 from T where UPPER(C1) like UPPER('abc')的确可以查询到记录,但存在以下问题:
(1)原默认索引不能使用,必须要建函数索引
(2)需要改动代码,工作量很大第二种:在Oracle10G以上版本,在查询时,执行以下语句ALTER SESSION SET NLS_COMP=ANSI;
ALTER SESSION SET NLS_SORT=binary_ci;再执行查询语句,对Select C1 from T where C1='abc',可以查询到记录,但对Select C1 from T where C1 like 'ab%',还是查询不到记录
现请问有没有其他的解决方案,能够方便的解决这种问题,最好是通过DB级设置解决
where upper(C1)=upper('abc')最好建函数索引提高查询速度