我在哪里可以查询oracle数据库的区分大小写?

时间:2009-08-07 13:49:52

标签: oracle collation case-sensitive

在哪里可以查询oracle数据库的当前区分大小写设置?

我试过查看v$databasenls_database_parameters,并查看系统包,但似乎没有一个提供我需要的信息......

3 个答案:

答案 0 :(得分:5)

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

来自documentation

  

NLS_COMP指定数据库会话的排序规则行为。

     

值:

     
      
  • BINARY

         

    通常情况下,WHERE子句和PL/SQL块中的比较是二进制的,除非您指定NLSSORT函数。

  •   
  • LINGUISTIC

         

    SQL子句和WHERE块中所有PL/SQL次操作的比较应使用NLS_SORT参数中指定的语言排序。要提高性能,您还可以在要进行语言比较的列上定义语言索引。

  •   
  • ANSI

         

    ANSI的设置是为了向后兼容;通常,您应将NLS_COMP设置为LINGUISTIC

  •   

答案 1 :(得分:1)

除了已经给出的答案之外,请注意11g中的区分大小写更改 - 例如请参阅11g文档重新密码。

答案 2 :(得分:0)

对于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文档:

10gR2 Linguistic Sorting and String Searching