Oracle 10g 中是否有将数据视为不区分大小写的设置?我在这里看到了一个解决方案。但是,这是在会话中完成的。我正在寻找的是架构或表上的设置,以将其数据视为不区分大小写。如果它在会话中,那么我将不得不对所有存储过程进行更改。
问问题
4471 次
2 回答
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>
于 2010-05-11T05:51:59.680 回答
2
没有选项可以使架构或表“不区分大小写”。
您可以使用 NLS_ 参数在会话上执行此操作,也可以在影响整个实例的 db 初始化文件中执行相同操作。
但是,这些搜索仅对严格相等搜索不区分大小写。如果您需要使用 LIKE,则需要考虑使用 REGEXP_LIKE。
在 REGEXP_LIKE 的情况下,您不需要 NLS_SORT 设置,因为 REGEXP_LIKE 有一个选项可以让它考虑不区分大小写的事情。
于 2010-05-10T19:38:32.373 回答