【问题标题】:Where can I query an oracle databases' case-sensitivity?我在哪里可以查询 Oracle 数据库的区分大小写?
【发布时间】:2010-11-17 16:55:08
【问题描述】:

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

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

【问题讨论】:

    标签: oracle collation case-sensitive


    【解决方案1】:

    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

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

    • ANSI

      ANSI 的设置是为了向后兼容;一般来说,你应该将NLS_COMP设置为LINGUISTIC

    【讨论】:

    • NLS_COMP 的可能值有哪些,它们是如何区分大小写的?
    【解决方案2】:

    对于 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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-17
        • 1970-01-01
        • 2011-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多