关于单个 NLS 参数

有许多单独的 NLS 参数可用。

另请参见:

关于区域设置和 NLS_LANG 参数

区域设置是系统或应用程序运行时所在的语言和文化环境。为 Oracle AI Database 软件指定区域设置的最简单方法是设置 NLS_LANG 参数。

NLS_LANG 参数为服务器会话(例如,SQL 语句处理)和客户机应用程序(例如,在 Oracle AI Database 工具中显示格式设置)设置参数 NLS_LANGUAGE 和 NLS_TERRITORY 的默认值。NLS_LANG 参数还设置客户机应用程序对所输入或显示的数据使用的字符集中。

NLS_LANG 的默认值在数据库安装过程中设置。可以使用 ALTER SESSION 语句更改 NLS 参数的值,其中包括 NLS_LANG 针对会话设置的那些参数。但是,只有客户机才能更改客户机环境中的 NLS 设置。

另请参见:

关于 NLS_LANGUAGE 参数

此参数指定数据库的默认语言。

指定:数据库的默认语言。以下各项的默认约定:

可接受的值:Oracle 支持的任何语言名称。有关列表,请参阅 Oracle AI Database Globalization Support Guide

默认值:由 NLS_LANG 设置,具体说明详见 About Locale and the NLS_LANG Parameter

设置以下各项的默认值:

Example 7-1 说明将 NLS_LANGUAGE 设置为 ITALIANGERMAN 时如何对服务器消息和月份缩写所产生的影响。

要在 SQL Developer 中尝试此示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。

示例 7-1 NLS_LANGUAGE 影响服务器消息和月份缩写

  1. 记下 NLS_LANGUAGE 的当前值。
  2. 如果步骤 1 中的值不是 ITALIAN,请更改该值为:

    ALTER SESSION SET NLS_LANGUAGE=ITALIAN;
  3. 查询不存在的表:
    SELECT * FROM nonexistent_table;
    结果:
    SELECT * FROM nonexistent_table
                *
    ERROR at line 1:
    ORA-00942: tabella o vista inesistente
  4. 运行此查询:
    SELECT LAST_NAME, HIRE_DATE
    FROM EMPLOYEES
    WHERE EMPLOYEE_ID IN (111, 112, 113);
    结果:
    LAST_NAME                 HIRE_DATE
    
    ------------------------- ---------
    Sciarra                   30-SET-97
    Urman                     07-MAR-98
    Popp                      07-DIC-99
    
    3 rows selected.
  5. 将 NLS_LANGUAGE 的值更改为 GERMAN

    ALTER SESSION SET NLS_LANGUAGE=GERMAN;
  6. 重复步骤 3 中的查询。

    结果:

    SELECT * FROM nonexistent_table
                *
    ERROR at line 1:
    ORA-00942: Tabelle oder View nicht vorhanden
  7. 重复步骤 4 中的查询。

    结果:

    LAST_NAME                 HIRE_DATE
    
    ------------------------- ---------
    Sciarra                   30-SEP-97
    Urman                     07-MRZ-98
    Popp                      07-DEZ-99
    
    3 rows selected.
  8. 将 NLS_LANGUAGE 设置为其在步骤 1 中所具有的值。

另请参见:

关于 NLS_TERRITORY 参数

此参数指定日期格式、时间戳格式、小数和组分隔符、本地货币符号、ISO 货币符号和双货币符号的默认约定。

指定:下列各项的默认约定:

可接受的值:Oracle 支持的任何地区名称。有关列表,请参阅 Oracle AI Database Globalization Support Guide

默认值:由 NLS_LANG 设置,具体说明详见 About Locale and the NLS_LANG Parameter

设置以下各项的默认值:

Example 7-2 说明将 NLS_TERRITORY 设置为 JAPANAMERICA 时对货币符号所产生的影响。

要在 SQL Developer 中尝试此示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。

示例 7-2 NLS_TERRITORY 影响货币符号

  1. 记下 NLS_TERRITORY 的当前值。
  2. 如果步骤 1 中的值不是 JAPAN,请更改该值为:

    ALTER SESSION SET NLS_TERRITORY=JAPAN;
  3. 运行此查询:
    SELECT TO_CHAR(SALARY,'L99G999D99') SALARY
    FROM EMPLOYEES
    WHERE EMPLOYEE_ID IN (100, 101, 102);
    结果:
    SALARY
    
    --------------------
    
            ©24,000.00
    
            ©17,000.00
    
            ©17,000.00
    
    3 rows selected.
  4. NLS_TERRITORY 的值更改为 AMERICA

    ALTER SESSION SET NLS_TERRITORY=AMERICA;
  5. 重复步骤 3 中的查询。

    结果:

    SALARY
    
    --------------------
    
            $24,000.00
    
            $17,000.00
    
            $17,000.00
    
    3 rows selected.
  6. NLS_TERRITORY 设置为其在步骤 1 中所具有的值。

另请参见:

关于 NLS_DATE_FORMAT 参数

此参数指定要与 TO_CHAR 和 TO_DATE 函数一起使用的默认日期格式。

指定:用于 TO_CHAR 和 TO_DATE 函数(具体介绍详见“在查询中使用转换函数”)的默认日期格式。

可接受的值:任何有效的日期时间格式样式。例如:

NLS_DATE_FORMAT='MM/DD/YYYY'

有关日期时间格式样式的信息,请参阅 Oracle AI Database SQL Language Reference

默认值:由 NLS_TERRITORY 设置,具体说明见“关于 NLS_TERRITORY 参数”。

默认日期格式可能与给定地区所使用的约定不符。要获取采用本地化格式的日期,可以使用 'DS'(短日期)格式和 'DL'(长日期)格式。示例 7-3 说明将 NLS_TERRITORY 设置为 AMERICAFRANCE 时如何影响默认格式、短日期和长日期格式。Example 7-4 更改 NLS_DATE_FORMAT 的值,以覆盖由 NLS_TERRITORY 设置的默认值。

要尝试使用 SQL Developer 中的示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。

示例 7-3 NLS_TERRITORY 影响日期格式

  1. 记下 NLS_TERRITORY 的当前值。
  2. 如果步骤 1 中的值不是 AMERICA,请更改该值为:

    ALTER SESSION SET NLS_TERRITORY=AMERICA;
  3. 运行此查询:
    SELECT hire_date "Default",
        TO_CHAR(hire_date,'DS') "Short",
        TO_CHAR(hire_date,'DL') "Long"
    FROM employees
    WHERE employee_id IN (111, 112, 113);
    结果:
    Default    Short      Long
    
    --------- ---------- -----------------------------
    
    30-SEP-05 9/30/2005  Friday, September 30, 2005
    
    07-MAR-98 3/7/2006   Tuesday, March 07, 2006
    
    07-DEC-99 12/7/2007  Friday, December 07, 2007
    
    3 rows selected.
  4. 将 NLS_TERRITORY 的值更改为 FRANCE

    ALTER SESSION SET NLS_TERRITORY=FRANCE;
  5. 重复步骤 3 中的查询。

    结果:

    Default  Short      Long
    
    -------- ---------- ---------------------------
    
    30/09/05 30/09/2005 friday 30 september 2005
    
    07/03/06 07/03/2006 tuesday 7 march 2006
    
    07/12/07 07/12/2007 friday 7 december 2007
    
    3 rows selected.

    (要获取以法语表示的日期和月份的名称,必须先将 NLS_LANGUAGE 或 NLS_DATE_LANGUAGE 设置为 FRENCH,然后再运行查询。)

  6. 将 NLS_TERRITORY 设置为其在步骤 1 中所具有的值。

示例 7-4 NLS_DATE_FORMAT 覆盖 NLS_TERRITORY

  1. 请注意 NLS_TERRITORY 和 NLS_DATE_FORMAT 的当前值。
  2. 如果步骤 1 中 NLS_TERRITORY 值不是 AMERICA,请更改该值:

    ALTER SESSION SET NLS_TERRITORY=AMERICA;
  3. 如果步骤 1 中 NLS_DATE_FORMAT 的值不是 'Day Month ddth',请更改该值为:

    ALTER SESSION SET NLS_DATE_FORMAT='Day Month ddth';
  4. 运行此查询 (从上例的步骤 3 中运行):

    SELECT hire_date "Default",
        TO_CHAR(hire_date,'DS') "Short",
        TO_CHAR(hire_date,'DL') "Long"
    FROM employees
    WHERE employee_id IN (111, 112, 113);

    结果:

    Default                  Short      Long
    
    ------------------------ ---------- -----------------------------
    
    Friday    September 30th 9/30/2005  Tuesday, September 30, 2005
    
    Tuesday   March     07th 3/7/2006   Saturday, March 07, 2006
    
    Friday    December  07th 12/7/2007  Tuesday, December 07, 2007
    
    3 rows selected.
  5. 将 NLS_TERRITORY 和 NLS_DATE_FORMAT 设置为其在步骤 1 中所具有的值。

    另请参见:

关于 NLS_DATE_LANGUAGE 参数

此参数指定以下项生成的日期和月份的名称和缩写语言:SQL 函数 TO_CHAR 和 TO_DATE、默认日期格式(由 NLS_DATE_FORMAT 设置)以及 AM、PM、AD 和 BC 等效默认语言的符号。

指定:由以下项生成的日和月份的名称和缩写的语言:

可接受的值:Oracle 支持的任何语言名称。有关列表,请参阅 Oracle AI Database Globalization Support Guide

默认值:由 NLS_LANGUAGE 设置,具体说明见“关于 NLS_LANGUAGE 参数”。Example 7-5 显示了将 NLS_DATE_LANGUAGE 设置为 FRENCHSWEDISH 时对所显示的系统日期产生的影响。

要在 SQL Developer 中尝试此示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。

示例 7-5 NLS_DATE_LANGUAGE 影响显示的 SYSDATE

  1. 记下 NLS_DATE_LANGUAGE 的当前值。
  2. 如果步骤 1 中的 NLS_DATE_LANGUAGE 的值不是 FRENCH,请更改该值:

    ALTER SESSION SET NLS_DATE_LANGUAGE=FRENCH;
  3. 运行此查询:
    SELECT TO_CHAR(SYSDATE, 'Day:Dd Month yyyy') "System Date"
    FROM DUAL;
    结果:
    System Date
    
    --------------------------
    
    Vendredi:28 December   2012
  4. 将 NLS_DATE_LANGUAGE 的值更改为 SWEDISH

    ALTER SESSION SET NLS_DATE_LANGUAGE=SWEDISH;
  5. 重复步骤 3 中的查询。

    结果:

    System Date
    
    -------------------------
    
    Fredag :28 December   2012
  6. NLS_DATE_LANGUAGE 设置为其在步骤 1 中的所具有的值。

另请参见:

关于 NLS_TIMESTAMP_FORMAT 和 NLS_TIMESTAMP_TZ_FORMAT 参数

此参数指定 TIMESTAMP 录音带和 TIMESTAMP WITH LOCAL TIME ZONEaudiotapeTIMESTAMP WITH LOCAL TIME ZONEaudiotape 的默认日期格式。

指定:以下项的默认日期格式:

可接受的值:任何有效的日期时间格式样式。例如:

NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH:MI:SS.FF'
NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD HH:MI:SS.FF TZH:TZM'

有关日期时间格式样式的信息,请参阅 Oracle AI Database SQL Language Reference

默认值:由 NLS_TERRITORY 设置,具体说明见“关于 NLS_TERRITORY 参数”。

另请参见:

关于 NLS_CALENDAR 参数

此参数指定数据库的日历系统。

指定:数据库的日历系统。

可接受的值:Oracle 支持的任何日历系统。有关列表,请参阅 Oracle AI Database Globalization Support Guide

默认值:Gregorian Example 7-6 显示将 NLS_CALENDAR 设置为 'English Hijrah'Gregorian 如何影响显示的系统日期。

要在 SQL Developer 中尝试此示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。

示例 7-6 NLS_CALENDAR 影响显示的 SYSDATE

  1. 请注意 NLS_CALENDAR 的当前值。
  2. 如果步骤 1 中 NLS_CALENDAR 的值不是 'English Hijrah',请更改该值:

    ALTER SESSION SET NLS_CALENDAR='English Hijrah';
  3. 运行此查询:

    SELECT SYSDATE FROM DUAL;

    结果:

    SYSDATE
    
    -------------------------
    
    17 Safar             1434
  4. 将 NLS_CALENDAR 的值更改为 'Gregorian'

    ALTER SESSION SET NLS_CALENDAR='Gregorian';
  5. 运行此查询:

    SELECT SYSDATE FROM DUAL;

    结果:

    SYSDATE
    
    ---------
    
    31-DEC-12
  6. 将 NLS_CALENDAR 设置为其在步骤 1 中所具有的值。

另请参见:

关于 NLS_NUMERIC_CHARACTERS 参数

此参数指定小数字符(用于将数字的整数部分和小数部分隔开)和组分隔符(例如,用于分隔整组以显示千数个位和百万数位)。组分隔符是由数值格式元素 G 返回的字符。

指定:小数字符(用于将整数部分的整数和小数部分的隔开)和组分隔符(例如,用于分隔整组以显示千位和百万数位)。组分隔符是由数值格式元素 G 返回的字符。

可接受的值:任何两个不同的单字节字符,以下各项除外:

默认值:NLS_TERRITORY 设置,具体说明见“关于 NLS_TERRITORY 参数”。

在 SQL 语句中,可以将数字表示为:

Example 7-7 显示了两种不同的 NLS_NUMERIC_CHARACTERS 设置如何影响同一查询的显示结果。

要在 SQL Developer 中尝试此示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。

示例 7-7 NLS_NUMERIC_CHARACTERS 影响小数字符和组分隔符

  1. 请注意 NLS_NUMERIC_CHARACTERS 的当前值。
  2. 如果步骤 1 中 NLS_NUMERIC_CHARACTERS 的值不是 ",."(小数字符为逗号,组分隔符为句子),请更改该值:

    ALTER SESSION SET NLS_NUMERIC_CHARACTERS=",.";
  3. 运行此查询:

    SELECT TO_CHAR(4000, '9G999D99') "Number" FROM DUAL;

    结果:

    Number
    
    ---------
    4.000,00
  4. 将 NLS_NUMERIC_CHARACTERS 的值更改为 ",."(小数字符为句子,组分隔符为逗号):

    ALTER SESSION SET NLS_NUMERIC_CHARACTERS=".,";
  5. 运行此查询:

    SELECT TO_CHAR(4000, '9G999D99') "Number" FROM DUAL;

    结果:

    Number
    
    ---------
    4,000.00
  6. 将 NLS_NUMERIC_CHARACTERS 设置为其在步骤 1 中所具有的值。

另请参见:

关于 NLS_CURRENCY 参数

此参数指定当地货币符号(由数值格式元素 L 返回的字符串)。

指定:当地货币符号(由数值格式元素 L 返回的字符串)。

可接受的值:任何有效的货币符号字符串。

默认值:由 NLS_TERRITORY 设置,具体说明见“关于 NLS_TERRITORY 参数”。Example 7-8 更改 NLS_CURRENCY 的值,以覆盖由 NLS_TERRITORY 设置的默认值。要在 SQL Developer 中尝试此示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。

示例 7-8 NLS_CURRENCY 覆盖 NLS_TERRITORY

  1. 记下 NLS_TERRITORY 和 NLS_CURRENCY 的当前值。
  2. 如果步骤 1 中 NLS_TERRITORY 值不是 AMERICA,请更改该值:

    ALTER SESSION SET NLS_TERRITORY=AMERICA;
  3. 运行此查询:

    SELECT TO_CHAR(salary, 'L099G999D99') "Salary"
    FROM EMPLOYEES
    WHERE salary > 13000;

    结果:

    Salary
    
    ---------------------
    
            $024,000.00
    
            $017,000.00
    
            $017,000.00
    
            $014,000.00
    
            $013,500.00
  4. 将 NLS_CURRENCY 的值更改为 '©'

    ALTER SESSION SET NLS_CURRENCY='©';
  5. 运行此查询:

    SELECT TO_CHAR(salary, 'L099G999D99') "Salary"
    FROM EMPLOYEES
    WHERE salary > 13000;

    结果:

    Salary
    
    ---------------------
    
            ©024,000.00
    
            ©017,000.00
    
            ©017,000.00
    
            ©014,000.00
    
            ©013,500.00
  6. 将 NLS_TERRITORY 和 NLS_CURRENCY 设置为其在步骤 1 中所具有的值。

另请参见:

关于 NLS_ISO_CURRENCY 参数

此参数指定 ISO 货币符号(数字格式元素 C 返回的字符串)。

指定: ISO 货币符号(由数值格式元素 C 返回的字符串)。

可接受的值:任何有效的货币符号字符串。

默认值:NLS_TERRITORY 设置,具体说明见“关于 NLS_TERRITORY 参数”。

当地货币符号可以是不明确的,但 ISO 货币符号是唯一的。示例 7-9 显示地区 AUSTRALIAAMERICA 具有相同的当地货币符号,但具有不同的 ISO 货币符号。

要在 SQL Developer 中尝试此示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。

示例 7-9 NLS_ISO_CURRENCY

  1. 请注意 NLS_TERRITORY 和 NLS_ISO_CURRENCY 的当前值。
  2. 如果步骤 1 中 NLS_TERRITORY 值不是 AUSTRALIA,请更改该值:

    ALTER SESSION SET NLS_TERRITORY=AUSTRALIA;
  3. 运行此查询:

    SELECT TO_CHAR(salary, 'L099G999D99') "Local",
            TO_CHAR(salary, 'C099G999D99') "ISO"
    FROM EMPLOYEES
    WHERE salary > 15000;

    结果:

    Local                 ISO
    
    --------------------- ------------------
    
            **$024,000.00      **AUD024,000.00
    
            **$017,000.00      **AUD017,000.00
    
            **$017,000.00      **AUD017,000.00
  4. 将 NLS_TERRITORY 的值更改为 AMERICA

    ALTER SESSION SET NLS_TERRITORY=AMERICA;
  5. 运行此查询:

    SELECT TO_CHAR(salary, 'L099G999D99') "Local",
            TO_CHAR(salary, 'C099G999D99') "ISO"
    FROM EMPLOYEES
    WHERE salary > 15000;

    结果:

    Local                 ISO
    
    --------------------- ------------------
    
            **$024,000.00      **USD024,000.00
    
            **$017,000.00      **USD017,000.00
    
            **$017,000.00      **USD017,000.00
  6. 将 NLS_TERRITORY 和 NLS_ISO_CURRENCY 设置为其在步骤 1 中所具有的值。

另请参见:

关于 NLS_DUAL_CURRENCY 参数

此参数指定双货币符号(在欧元转换期间为支持欧元货币符号而引入)。

指定:双货币符号(引入是为了在欧元过渡期间支持欧元货币符号)。

可接受的值:任何有效的货币符号字符串。

默认值:由 NLS_TERRITORY 设置,具体说明见“关于 NLS_TERRITORY 参数”。

另请参见:

关于 NLS_SORT 参数

此参数为包含 ORDER BY 子句的查询指定语言排序顺序(整理序列)。

指定:包含 ORDER BY 子句的查询的语言排序顺序(整理序列)。

可接受的值:

默认值:由 NLS_LANGUAGE 设置,具体说明见“关于 NLS_LANGUAGE 参数”。Example 7-10 显示了两种不同的 NLS_SORT 设置如何影响同一查询的显示结果。这些设置为 BINARY 和传统西班牙语 (SPANISH_M)。传统西班牙语分别将 ch、ll 和 ñ 视作位于 c、l 和 n 之后的字母。

要在 SQL Developer 中尝试此示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。

不区分大小写和不区分重音排序

Oracle AI Database 中的操作对大小写和字符重音敏感。要执行不区分大小写的排序,请将 _CI 附加到 NLS_SORT 参数的值之前(例如 BINARY_CIGERMAN_CI)。要执行不区分大小写和不区分重音的排序,请将 _AI 附加到 NLS_SORT 参数的值之后(例如 BINARY_AIFRENCH_M_AI)。

示例 7-10 NLS_SORT 影响语言排序顺序

  1. 为西班牙语单词创建表:

    CREATE TABLE temp (name VARCHAR2(15));
  2. 使用某些西班牙语单词填充表:

    INSERT INTO temp (name) VALUES ('laguna');
    INSERT INTO temp (name) VALUES ('llama');
    INSERT INTO temp (name) VALUES ('loco');
  3. 记下 NLS_SORT 的当前值。
  4. 如果步骤 3 中的 NLS_SORT 值不是 BINARY,请更改该值为:

    ALTER SESSION SET NLS_SORT=BINARY;
  5. 运行此查询:
    SELECT * FROM temp ORDER BY name;
    结果:
    NAME
    
    ---------------
    laguna
    
    llama
    
    loco
  6. 将 NLS_SORT 的值更改为 SPANISH_M(传统西班牙语):

    ALTER SESSION SET NLS_SORT=SPANISH_M;
  7. 重复步骤 5 中的查询。

    结果:

    NAME
    
    ---------------
    laguna
    
    loco
    
    llama
  8. 删除表:

    DROP TABLE temp;
  9. 将 NLS_SORT 设置为其在步骤 3 中所具有的值。

另请参见:

关于 NLS_COMP 参数

此参数指定 SQL 操作的字符比较行为。

指定: SQL 操作的字符比较行为。

可接受的值:

默认值:BINARY Example 7-11 显示查询的结果可能取决于 NLS_COMP 设置。

要在 SQL Developer 中尝试此示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。

示例 7-11 NLS_COMP 影响 SQL 字符比较

  1. 请注意 NLS_SORT 和 NLS_COMP 的当前值。
  2. 如果步骤 1 中 NLS_SORT 和 NLS_COMP 的值不是相应的 SPANISH_M(传统西班牙语)和 BINARY,请对其进行更改:

    ALTER SESSION SET NLS_SORT=SPANISH_M NLS_COMP=BINARY;
  3. *运行此查询:
    SELECT LAST_NAME FROM EMPLOYEES
    WHERE LAST_NAME LIKE 'C%';
    结果:
    LAST_NAME
    
    -------------------------
    Cabrio
    Cambrault
    Cambrault
    Chen
    Chung
    Colmenares
    
    6 rows selected
  4. 将 NLS_COMP 的值更改为 LINGUISTIC

    ALTER SESSION SET NLS_COMP=LINGUISTIC;
  5. 重复步骤 3 中的查询。

    结果:

    LAST_NAME
    
    -------------------------
    Cabrio
    Cambrault
    Cambrault
    Colmenares
    
    4 rows selected

    不会返回 Chen 和 Chung,因为传统西班牙语言将 ch 视作 c 之后的单个字符。

  6. 将 NLS_SORT 和 NLS_COMP 设置为其在步骤 1 中所具有的值。

另请参见:

关于 NLS_LENGTH_SEMANTICS 参数

此参数指定字符数据类型 CHAR、VARCHAR2 和 LONG 的列的长语义;即是以字节还是字符来指定这些列。(仅适用于在设置参数之后所声明的列。)

指定:字符数据类型 CHAR、VARCHAR2 和 LONG 的列的长度语义;即是以字节还是字符来指定这些列。(仅适用于在设置参数之后所声明的列。)

可接受的值:

默认值:BYTE

要在 SQL Developer 中尝试此示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。

示例 7-12 NLS_LENGTH_SEMANTICS 影响 VARCHAR2 列的存储

  1. 请注意 NLS_LENGTH_SEMANTICS 的当前值。
  2. 如果步骤 1 中 NLS_LENGTH_SEMANTICS 值不是 BYTE,请更改该值:

    ALTER SESSION SET NLS_LENGTH_SEMANTICS=BYTE;
  3. 创建包含 VARCHAR2 列的表:

    CREATE TABLE SEMANTICS_BYTE(SOME_DATA VARCHAR2(20));
  4. 单击选项卡连接

  5. 在 "Connections"(连接)框架中,展开 hr_conn

  6. 在方案对象类型的列表中,展开

  7. 在表的列表中,选择 SEMANTICS_BYTE

    在“连接”窗格的右侧,“列”窗格显示对于“列名”SOME_DATA,“数据类型”为 VARCHAR2(20 BYTE)

  8. 将 NLS_LENGTH_SEMANTICS 的值更改为 CHAR

    ALTER SESSION SET NLS_LENGTH_SEMANTICS=CHAR;
  9. 创建另外一个包含 VARCHAR2 列的表:

    CREATE TABLE SEMANTICS_CHAR(SOME_DATA VARCHAR2(20));
  10. 在“连接”框架中,单击“刷新”图标

    表的列表现在包括 SEMANTICS_CHAR。

  11. 选择 SEMANTICS_CHAR

    “列”窗格显示对于“列名”SOME_DATA,“数据类型”为 VARCHAR2(20 CHAR)

  12. 再次选择 SEMANTICS_BYTE

    “列”窗格显示对于“列名”SOME_DATA,“数据类型”仍为 VARCHAR2(20 BYTE)

  13. 将 NLS_LENGTH_SEMANTICS 的值设置为其在步骤 1 中所具有的值。

另请参见: