关于单个 NLS 参数

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

另请参见:

关于区域设置和 NLS_LANG 参数

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

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

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

另请参见:

关于 NLS_LANGUAGE 参数

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

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

可接受的值:Oracle 支持的任何语言名称。有关列表,请参阅 Oracle 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 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 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 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 Database SQL Language Reference

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

另请参见:

关于 NLS_CALENDAR 参数

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

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

可接受的值:Oracle 支持的任何日历系统。有关列表,请参阅 Oracle 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 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 中所具有的值。

另请参见: