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