2010-05-10 76 views
1

Oracle 10g中是否存在将数据视为不区分大小写的设置?我看到了一个解决方案here。但是,这是在会话中完成的。我正在寻找的是一种架构或表上的设置,以将其数据视为不区分大小写。如果它正在进行会话,那么我将不得不对所有存储过程进行更改。如何使Oracle不区分大小写

回答

2

没有选择让模式或表格'不区分大小写'。

  • 你可以做到这一点上的会话使用NLS_参数或做在整个实例受影响的数据库初始化文件相同。
    但是,对于严格的平等搜索,这些搜索仅区分大小写

  • 如果你需要使用LIKE然后你需要考虑使用REGEXP_LIKE。
    在REGEXP_LIKE的情况下,您不需要NLS_SORT设置,因为REGEXP_LIKE有一个选项可以让事情不区分大小写。

+0

1为答案和背景。我冒昧地设计你的答案.. – lexu 2010-05-11 05:09:57

2

大小写敏感性是计算的基础,简单的理由是'yun'的ASCII值!='YUN'的ASCII值。所以,当你说...

考虑数据不区分大小写

...你的意思只是为了搜索的目的或为存储呢?

与每一个搜索执行情况的问题是这样的:

SQL> create table t23 (id number, name varchar2(20)) 
    2/

Table created. 

SQL> create unique index t23_uk on t23(name) 
    2/

Index created. 

SQL> insert into t23 values (1, 'SAM-I-AM') 
    2/

1 row created. 

SQL> insert into t23 values (2, 'sam-i-am') 
    2/

1 row created. 

SQL> select id, name, ascii(name) from t23 
    2/

     ID NAME     ASCII(NAME) 
---------- -------------------- ----------- 
     1 SAM-I-AM      83 
     2 sam-i-am      115 

SQL> 

如果不区分大小写的搜索是在模式或表级别,我们怎能区分“SAM-I-AM”“强制SAM-我是'?

它是 - 有点 - 可以强制不区分大小写的数据存储,尽管在单个列级别:

SQL> delete from t23 
    2/

2 rows deleted. 

SQL> drop index t23_uk 
    2/

Index dropped. 

SQL> create unique index t23_uk on t23(upper(name)) 
    2/

Index created. 

SQL> insert into t23 values (1, 'SAM-I-AM') 
    2/

1 row created. 

SQL> insert into t23 values (2, 'sam-i-am') 
    2/
insert into t23 values (2, 'sam-i-am') 
* 
ERROR at line 1: 
ORA-00001: unique constraint (APC.T23_UK) violated 


SQL>