【发布时间】:2010-11-17 16:55:08
【问题描述】:
在哪里可以查询oracle数据库当前的区分大小写设置?
我试过查看v$database、nls_database_parameters,并查看系统包,但它们似乎都没有提供我需要的信息...
【问题讨论】:
标签: oracle collation case-sensitive
在哪里可以查询oracle数据库当前的区分大小写设置?
我试过查看v$database、nls_database_parameters,并查看系统包,但它们似乎都没有提供我需要的信息...
【问题讨论】:
标签: oracle collation case-sensitive
在Oracle 10gR2:
SELECT *
FROM NLS_SESSION_PARAMETERS
WHERE parameter IN ('NLS_COMP', 'NLS_SORT')
SQL> ALTER SESSION SET NLS_COMP = 'LINGUISTIC'
2 /
Session altered
SQL> SELECT COUNT(*)
2 FROM dual
3 WHERE 'a' = 'A'
4 /
COUNT(*)
----------
1
SQL> ALTER SESSION SET NLS_COMP = 'BINARY'
2 /
Session altered
SQL> SELECT COUNT(*)
2 FROM dual
3 WHERE 'a' = 'A'
4 /
COUNT(*)
----------
0
NLS_COMP指定数据库会话的整理行为。价值观:
BINARY通常,
WHERE子句和PL/SQL块中的比较是二进制的,除非您指定NLSSORT函数。
LINGUISTIC
WHERE子句和PL/SQL块中的所有SQL操作的比较应使用NLS_SORT参数中指定的语言排序。为了提高性能,您还可以在要进行语言比较的列上定义语言索引。
ANSI
ANSI的设置是为了向后兼容;一般来说,你应该将NLS_COMP设置为LINGUISTIC
【讨论】:
对于 Oracle 10gR2(及更高版本),参数为 NLS_COMP 和 NLS_SORT。
select * from v$nls_parameters where parameter in ('NLS_COMP','NLS_SORT');
(这些参数在会话级别设置。会话的设置继承自数据库设置,除非通过设置 OS 环境变量或 ALTER SESSION 语句覆盖。)
如果你想要“不区分大小写”的排序和字符串匹配,你可以试试这些设置:
alter session set NLS_SORT=BINARY_CI;
alter session set NLS_COMP=LINGUISTIC;
当然,这些并不是参数的唯一设置。 Oracle 10gR2 文档:
【讨论】:
除了已经给出的答案之外,请注意 11g 中区分大小写的变化 - 例如请参阅 11g 文档重新设置密码。
【讨论】: