如何使Oracle不区分大小写

时间:2010-05-10 19:26:21

标签: oracle plsql case-insensitive

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

2 个答案:

答案 0 :(得分:2)

没有选项可以使架构或表'不区分大小写'。

  • 您可以使用NLS_参数在会话上执行,或者在整个实例受影响的db init文件中执行相同操作。
    但是这些搜索只是大小写 - 不敏感的用于严格的平等搜索。

  • 如果需要使用LIKE ,则需要考虑使用REGEXP_LIKE。
    对于REGEXP_LIKE,您不需要NLS_SORT设置,因为REGEXP_LIKE有一个选项可以让它认为不区分大小写。

答案 1 :(得分: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-I-AM'?

有点 - 可能会对数据存储实施不区分大小写,尽管在单个列级别:

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>