关于单个 NLS 参数
有许多单独的 NLS 参数可用。
另请参见:
-
Oracle Database Globalization Support Guide(了解有关设置全球化支持环境的详细信息)
关于区域设置和 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 设置。
另请参见:
-
Oracle Database Globalization Support Guide(了解有关使用
NLS_LANG参数指定区域设置的详细信息) -
Oracle Database Globalization Support Guide,了解有关 Oracle Database 支持的语言、地区、字符集和其他语言环境数据的信息
关于 NLS_LANGUAGE 参数
此参数指定数据库的默认语言。
指定:数据库的默认语言。以下各项的默认约定:
-
服务器消息的语言
-
在 SQL 函数 TO_CHAR 和 TO_DATE 中指定的月份和月份的名称以及缩写的语言
-
AM、PM、AD 和 BC 的默认语言对等项的符号
-
指定 ORDER BY 子句时字符数据的默认排序顺序
-
书写方向
-
肯定答复和否定答复字符串 (例如,YES 和 NO)
可接受的值:Oracle 支持的任何语言名称。有关列表,请参阅 Oracle Database Globalization Support Guide。
默认值:由 NLS_LANG 设置,具体说明详见 About Locale and the NLS_LANG Parameter 。
设置以下各项的默认值:
-
NLS_DATE_LANGUAGE,具体说明详见“关于 NLS_DATE_LANGUAGE 参数”。
-
NLS_SORT,详见“关于 NLS_SORT 参数”。
Example 7-1 说明将 NLS_LANGUAGE 设置为 ITALIAN 和 GERMAN 时如何对服务器消息和月份缩写所产生的影响。
要在 SQL Developer 中尝试此示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。
示例 7-1 NLS_LANGUAGE 影响服务器消息和月份缩写
-
记下 NLS_LANGUAGE 的当前值。
-
如果步骤 1 中的值不是
ITALIAN,请更改该值为:ALTER SESSION SET NLS_LANGUAGE=ITALIAN; -
查询不存在的表:
SELECT * FROM nonexistent_table;结果:
SELECT * FROM nonexistent_table * ERROR at line 1: ORA-00942: tabella o vista inesistente -
运行下面的查询:
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. -
将 NLS_LANGUAGE 的值更改为
GERMAN:ALTER SESSION SET NLS_LANGUAGE=GERMAN; -
重复步骤 3 中的查询。
结果:
SELECT * FROM nonexistent_table * ERROR at line 1: ORA-00942: Tabelle oder View nicht vorhanden -
重复步骤 4 中的查询。
结果:
LAST_NAME HIRE_DATE ------------------------- --------- Sciarra 30-SEP-97 Urman 07-MRZ-98 Popp 07-DEZ-99 3 rows selected. - 将 NLS_LANGUAGE 设置为其在步骤 1 中所具有的值。
另请参见:
-
Oracle Database Globalization Support Guide(了解有关 NLS_LANGUAGE 参数的详细信息)
-
“关于语言支持”
关于 NLS_TERRITORY 参数
此参数指定日期格式、时间戳格式、小数和组分隔符、本地货币符号、ISO 货币符号和双货币符号的默认约定。
指定:下列各项的默认约定:
-
日期格式
-
时间戳格式
-
小数字符和组分隔符
-
当地货币符号
-
ISO 货币符号
-
双货币符号
可接受的值:Oracle 支持的任何地区名称。有关列表,请参阅 Oracle Database Globalization Support Guide。
默认值:由 NLS_LANG 设置,具体说明详见 About Locale and the NLS_LANG Parameter 。
设置以下各项的默认值:
-
NLS_DATE_FORMAT,具体说明详见“关于 NLS_DATE_FORMAT 参数”。
-
NLS_TIMESTAMP_FORMAT 和 NLS_TIMESTAMP_TZ_FORMAT,具体说明详见“关于 NLS_TIMESTAMP_FORMAT 和 NLS_TIMESTAMP_TZ_FORMAT 参数”。
-
NLS_NUMERIC_CHARACTERS,具体说明见“关于 NLS_NUMERIC_CHARACTERS 参数”。 -
NLS_CURRENCY,具体说明详见“关于 NLS_CURRENCY 参数”。
-
NLS_ISO_CURRENCY,具体说明详见“关于 NLS_ISO_CURRENCY 参数”。
-
NLS_DUAL_CURRENCY,具体说明详见“关于 NLS_DUAL_CURRENCY 参数”。
Example 7-2 说明将 NLS_TERRITORY 设置为 JAPAN 和 AMERICA 时对货币符号所产生的影响。
要在 SQL Developer 中尝试此示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。
示例 7-2 NLS_TERRITORY 影响货币符号
-
记下 NLS_TERRITORY 的当前值。
-
如果步骤 1 中的值不是
JAPAN,请更改该值为:ALTER SESSION SET NLS_TERRITORY=JAPAN; -
运行下面的查询:
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. -
将
NLS_TERRITORY的值更改为AMERICA:ALTER SESSION SET NLS_TERRITORY=AMERICA; -
重复步骤 3 中的查询。
结果:
SALARY -------------------- $24,000.00 $17,000.00 $17,000.00 3 rows selected. - 将
NLS_TERRITORY设置为其在步骤 1 中所具有的值。
另请参见:
-
Oracle Database Globalization Support Guide(了解有关 NLS_TERRITORY 参数的详细信息)
-
“关于地区支持”
关于 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 设置为 AMERICA 和 FRANCE 时如何影响默认格式、短日期和长日期格式。Example 7-4 更改 NLS_DATE_FORMAT 的值,以覆盖由 NLS_TERRITORY 设置的默认值。
要尝试使用 SQL Developer 中的示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。
示例 7-3 NLS_TERRITORY 影响日期格式
-
记下 NLS_TERRITORY 的当前值。
-
如果步骤 1 中的值不是
AMERICA,请更改该值为:ALTER SESSION SET NLS_TERRITORY=AMERICA; -
运行下面的查询:
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. -
将 NLS_TERRITORY 的值更改为
FRANCE:ALTER SESSION SET NLS_TERRITORY=FRANCE; -
重复步骤 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,然后再运行查询。) - 将 NLS_TERRITORY 设置为其在步骤 1 中所具有的值。
示例 7-4 NLS_DATE_FORMAT 覆盖 NLS_TERRITORY
-
请注意 NLS_TERRITORY 和 NLS_DATE_FORMAT 的当前值。
-
如果步骤 1 中 NLS_TERRITORY 值不是
AMERICA,请更改该值:ALTER SESSION SET NLS_TERRITORY=AMERICA; -
如果步骤 1 中 NLS_DATE_FORMAT 的值不是
'Day Month ddth',请更改该值为:ALTER SESSION SET NLS_DATE_FORMAT='Day Month ddth'; -
运行此查询 (从上例的步骤 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. - 将 NLS_TERRITORY 和 NLS_DATE_FORMAT 设置为其在步骤 1 中所具有的值。
另请参见:
-
Oracle Database Globalization Support Guide(了解有关 NLS_DATE_FORMAT 参数的详细信息)
-
Oracle Database SQL Language Reference(了解有关 TO_CHAR 函数的详细信息)
-
Oracle Database SQL Language Reference(了解有关 TO_DATE 函数的详细信息)
关于 NLS_DATE_LANGUAGE 参数
此参数指定以下项生成的日期和月份的名称和缩写语言:SQL 函数 TO_CHAR 和 TO_DATE、默认日期格式(由 NLS_DATE_FORMAT 设置)以及 AM、PM、AD 和 BC 等效默认语言的符号。
指定:由以下项生成的日和月份的名称和缩写的语言:
-
SQL 函数 TO_CHAR 和 TO_DATE(具体介绍详请参见“在查询中使用转换函数”)
-
默认日期格式(由 NLS_DATE_FORMAT 设置,具体说明详见“关于 NLS_DATE_FORMAT 参数”)
-
AM、PM、AD 和 BC 的默认语言对等项的符号
可接受的值:Oracle 支持的任何语言名称。有关列表,请参阅 Oracle Database Globalization Support Guide。
默认值:由 NLS_LANGUAGE 设置,具体说明见“关于 NLS_LANGUAGE 参数”。
Example 7-5 显示了将 NLS_DATE_LANGUAGE 设置为 FRENCH 和 SWEDISH 时对所显示的系统日期产生的影响。
要在 SQL Developer 中尝试此示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。
示例 7-5 NLS_DATE_LANGUAGE 影响显示的 SYSDATE
-
记下 NLS_DATE_LANGUAGE 的当前值。
-
如果步骤 1 中的 NLS_DATE_LANGUAGE 的值不是
FRENCH,请更改该值:ALTER SESSION SET NLS_DATE_LANGUAGE=FRENCH; -
运行此查询:
SELECT TO_CHAR(SYSDATE, 'Day:Dd Month yyyy') "System Date" FROM DUAL;结果:
System Date -------------------------- Vendredi:28 December 2012 -
将 NLS_DATE_LANGUAGE 的值更改为
SWEDISH:ALTER SESSION SET NLS_DATE_LANGUAGE=SWEDISH; -
重复步骤 3 中的查询。
结果:
System Date ------------------------- Fredag :28 December 2012 - 将
NLS_DATE_LANGUAGE设置为其在步骤 1 中的所具有的值。
另请参见:
-
Oracle Database Globalization Support Guide(了解有关 NLS_DATE_LANGUAGE 参数的详细信息)
-
Oracle Database SQL Language Reference(了解有关 TO_CHAR 函数的详细信息)
-
Oracle Database SQL Language Reference(了解有关 y 函数的详细信息)
关于 NLS_TIMESTAMP_FORMAT 和 NLS_TIMESTAMP_TZ_FORMAT 参数
此参数指定 TIMESTAMP 录音带和 TIMESTAMP WITH LOCAL TIME ZONEaudiotapeTIMESTAMP WITH LOCAL TIME ZONEaudiotape 的默认日期格式。
指定:以下项的默认日期格式:
-
TIMESTAMP 录音带
-
TIMESTAMP 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 参数”。
另请参见:
-
Oracle Database Globalization Support Guide(了解有关 NLS_TIMESTAMP_FORMAT 参数的详细信息)
-
Oracle Database Globalization Support Guide(了解有关 NLS_TIMESTAMP_TZ_FORMAT 参数的详细信息)
-
Oracle Database Globalization Support Guide(了解有关日期/时间数据类型和时区支持的信息)
-
Oracle Database SQL Language Reference(了解有关 TIMESTAMP 审计磁带的详细信息)
-
Oracle Database SQL Language Reference(了解有关 TIMESTAMP WITH LOCAL TIME ZONE 数据类型的详细信息
关于 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
-
请注意 NLS_CALENDAR 的当前值。
-
如果步骤 1 中 NLS_CALENDAR 的值不是
'English Hijrah',请更改该值:ALTER SESSION SET NLS_CALENDAR='English Hijrah'; -
运行下面的查询:
SELECT SYSDATE FROM DUAL;结果:
SYSDATE ------------------------- 17 Safar 1434 -
将 NLS_CALENDAR 的值更改为
'Gregorian':ALTER SESSION SET NLS_CALENDAR='Gregorian'; -
运行下面的查询:
SELECT SYSDATE FROM DUAL;结果:
SYSDATE --------- 31-DEC-12 - 将 NLS_CALENDAR 设置为其在步骤 1 中所具有的值。
另请参见:
-
Oracle Database Globalization Support Guide(了解有关
NLS_CALENDAR参数的详细信息) -
“关于日历格式”
关于 NLS_NUMERIC_CHARACTERS 参数
此参数指定小数字符(用于将数字的整数部分和小数部分隔开)和组分隔符(例如,用于分隔整组以显示千数个位和百万数位)。组分隔符是由数值格式元素 G 返回的字符。
指定:小数字符(用于将整数部分的整数和小数部分的隔开)和组分隔符(例如,用于分隔整组以显示千位和百万数位)。组分隔符是由数值格式元素 G 返回的字符。
可接受的值:任何两个不同的单字节字符,以下各项除外:
-
数值字符
-
加号 (+)
-
减号 (-)
-
小于号 (<)
-
大于号 (>)
默认值:由 NLS_TERRITORY 设置,具体说明见“关于 NLS_TERRITORY 参数”。
在 SQL 语句中,可以将数字表示为:
-
数值字符串
数值字符串不会包含在引号中,始终将句点 (.) 用作小数字符,而且从不包含组分隔符。
-
文本字符串
文本字符串包含在单引号中。如果需要,系统会根据当前的 NLS 设置,通过隐式或显式方式将其转换为一个数字。
Example 7-7 显示了两种不同的 NLS_NUMERIC_CHARACTERS 设置如何影响同一查询的显示结果。
要在 SQL Developer 中尝试此示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。
示例 7-7 NLS_NUMERIC_CHARACTERS 影响小数字符和组分隔符
-
请注意 NLS_NUMERIC_CHARACTERS 的当前值。
-
如果步骤 1 中 NLS_NUMERIC_CHARACTERS 的值不是
",."(小数字符为逗号,组分隔符为句子),请使用以下命令更改该值:ALTER SESSION SET NLS_NUMERIC_CHARACTERS=",."; -
运行下面的查询:
SELECT TO_CHAR(4000, '9G999D99') "Number" FROM DUAL;结果:
Number --------- 4.000,00 -
将 NLS_NUMERIC_CHARACTERS 的值更改为
",."(小数字符为句子,组分隔符为逗号):ALTER SESSION SET NLS_NUMERIC_CHARACTERS=".,"; -
运行下面的查询:
SELECT TO_CHAR(4000, '9G999D99') "Number" FROM DUAL;结果:
Number --------- 4,000.00 - 将 NLS_NUMERIC_CHARACTERS 设置为其在步骤 1 中所具有的值。
另请参见:
-
Oracle Database Globalization Support Guide(了解有关 NLS_NUMERIC_CHARACTERS 参数的详细信息)
关于 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
-
记下 NLS_TERRITORY 和 NLS_CURRENCY 的当前值。
-
如果步骤 1 中 NLS_TERRITORY 值不是
AMERICA,请更改该值:ALTER SESSION SET NLS_TERRITORY=AMERICA; -
运行此查询:
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 -
将 NLS_CURRENCY 的值更改为
'©':ALTER SESSION SET NLS_CURRENCY='©'; -
运行此查询:
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 - 将 NLS_TERRITORY 和 NLS_CURRENCY 设置为其在步骤 1 中所具有的值。
另请参见:
-
Oracle Database Globalization Support Guide(了解有关 NLS_CURRENCY 参数的详细信息)
关于 NLS_ISO_CURRENCY 参数
此参数指定 ISO 货币符号(数字格式元素 C 返回的字符串)。
指定: ISO 货币符号(由数值格式元素 C 返回的字符串)。
可接受的值:任何有效的货币符号字符串。
默认值:由 NLS_TERRITORY 设置,具体说明见“关于 NLS_TERRITORY 参数”。
当地货币符号可以是不明确的,但 ISO 货币符号是唯一的。示例 7-9 显示地区 AUSTRALIA 和 AMERICA 具有相同的当地货币符号,但具有不同的 ISO 货币符号。
要在 SQL Developer 中尝试此示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。
示例 7-9 NLS_ISO_CURRENCY
-
请注意 NLS_TERRITORY 和 NLS_ISO_CURRENCY 的当前值。
-
如果步骤 1 中 NLS_TERRITORY 值不是
AUSTRALIA,请更改该值:ALTER SESSION SET NLS_TERRITORY=AUSTRALIA; -
运行下面的查询:
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 -
将 NLS_TERRITORY 的值更改为
AMERICA:ALTER SESSION SET NLS_TERRITORY=AMERICA; -
运行下面的查询:
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 - 将 NLS_TERRITORY 和 NLS_ISO_CURRENCY 设置为其在步骤 1 中所具有的值。
另请参见:
-
Oracle Database Globalization Support Guide(了解有关 NLS_ISO_CURRENCY 参数的详细信息)
关于 NLS_DUAL_CURRENCY 参数
此参数指定双货币符号(在欧元转换期间为支持欧元货币符号而引入)。
指定:双货币符号(引入是为了在欧元过渡期间支持欧元货币符号)。
可接受的值:任何有效的货币符号字符串。
默认值:由 NLS_TERRITORY 设置,具体说明见“关于 NLS_TERRITORY 参数”。
另请参见:
-
Oracle Database Globalization Support Guide(了解有关 NLS_DUAL_CURRENCY 参数的详细信息)
关于 NLS_SORT 参数
此参数为包含 ORDER BY 子句的查询指定语言排序顺序(整理序列)。
指定:包含 ORDER BY 子句的查询的语言排序顺序(整理序列)。
可接受的值:
-
BINARY排序顺序基于数据库字符集或国家字符集的二进制序列顺序,具体取决于数据类型。
-
Oracle 支持的任意语言排序名称
排序顺序基于指定的语言排序名称的顺序。语言排序名称通常与语言名称相同,但有时会不同。有关支持的语言排序名称的列表,请参阅 Oracle Database Globalization Support Guide。
默认值:由 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_CI 或 GERMAN_CI)。要执行不区分大小写和不区分重音的排序,请将 _AI 附加到 NLS_SORT 参数的值之后(例如 BINARY_AI 或 FRENCH_M_AI)。
示例 7-10 NLS_SORT 影响语言排序顺序
-
为西班牙语单词创建表:
CREATE TABLE temp (name VARCHAR2(15)); -
使用某些西班牙语单词填充表:
INSERT INTO temp (name) VALUES ('laguna'); INSERT INTO temp (name) VALUES ('llama'); INSERT INTO temp (name) VALUES ('loco'); -
记下 NLS_SORT 的当前值。
-
如果步骤 3 中的 NLS_SORT 值不是
BINARY,请更改该值为:ALTER SESSION SET NLS_SORT=BINARY; -
运行下面的查询:
SELECT * FROM temp ORDER BY name;结果:
NAME --------------- laguna llama loco -
将 NLS_SORT 的值更改为
SPANISH_M(传统西班牙语):ALTER SESSION SET NLS_SORT=SPANISH_M; -
重复步骤 5 中的查询。
结果:
NAME --------------- laguna loco llama -
删除表:
DROP TABLE temp; - 将 NLS_SORT 设置为其在步骤 3 中所具有的值。
另请参见:
-
Oracle Database Globalization Support Guide(了解有关
NLS_SORT参数的详细信息) -
Oracle Database Globalization Support Guide(了解有关不区分大小写且不区分重音的排序的详细信息)
关于 NLS_COMP 参数
此参数指定 SQL 操作的字符比较行为。
指定: SQL 操作的字符比较行为。
可接受的值:
-
BINARYSQL 会比较字符的二进制代码。如果某个字符的二进制代码比另一个字符的二进制代码大,则这个字符大于另一个字符。
-
LINGUISTICSQL 基于
NLS_SORT参数的值执行语言比较,具体说明详见“关于 NLS_SORT 参数”。 -
ANSI提供此值仅用于向后兼容。
默认值:BINARY
Example 7-11 显示查询的结果可能取决于 NLS_COMP 设置。
要在 SQL Developer 中尝试此示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。
示例 7-11 NLS_COMP 影响 SQL 字符比较
-
请注意 NLS_SORT 和 NLS_COMP 的当前值。
-
如果步骤 1 中 NLS_SORT 和 NLS_COMP 的值不是相应的
SPANISH_M(传统西班牙语)和BINARY,请对其进行更改:ALTER SESSION SET NLS_SORT=SPANISH_M NLS_COMP=BINARY; -
运行下面的查询:
SELECT LAST_NAME FROM EMPLOYEES WHERE LAST_NAME LIKE 'C%';结果:
LAST_NAME ------------------------- Cabrio Cambrault Cambrault Chen Chung Colmenares 6 rows selected -
将 NLS_COMP 的值更改为
LINGUISTIC:ALTER SESSION SET NLS_COMP=LINGUISTIC; -
重复步骤 3 中的查询。
结果:
LAST_NAME ------------------------- Cabrio Cambrault Cambrault Colmenares 4 rows selected不会返回 Chen 和 Chung,因为传统西班牙语言将
ch视作c之后的单个字符。 - 将 NLS_SORT 和 NLS_COMP 设置为其在步骤 1 中所具有的值。
另请参见:
-
Oracle Database Globalization Support Guide(了解有关 NLS_COMP 参数的详细信息)
关于 NLS_LENGTH_SEMANTICS 参数
此参数指定字符数据类型 CHAR、VARCHAR2 和 LONG 的列的长语义;即是以字节还是字符来指定这些列。(仅适用于在设置参数之后所声明的列。)
指定:字符数据类型 CHAR、VARCHAR2 和 LONG 的列的长度语义;即是以字节还是字符来指定这些列。(仅适用于在设置参数之后所声明的列。)
可接受的值:
-
BYTE采用字节指定新的 CHAR、VARCHAR2 和 LONG 列。
-
CHAR采用字符指定新的 CHAR、VARCHAR2 和 LONG 列。
默认值:BYTE
要在 SQL Developer 中尝试此示例,请在工作表中输入语句和查询。有关该工作表的信息,请参阅“在 SQL Developer 中运行查询”。这里所显示的结果来自 SQL*Plus,其格式与 SQL Developer 中的结果格式稍有不同。
示例 7-12 NLS_LENGTH_SEMANTICS 影响 VARCHAR2 列的存储
-
请注意 NLS_LENGTH_SEMANTICS 的当前值。
-
如果步骤 1 中 NLS_LENGTH_SEMANTICS 值不是
BYTE,请更改该值:ALTER SESSION SET NLS_LENGTH_SEMANTICS=BYTE; -
创建包含 VARCHAR2 列的表:
CREATE TABLE SEMANTICS_BYTE(SOME_DATA VARCHAR2(20)); -
单击连接选项卡。
-
在 "Connections"(连接)框架中,展开 hr_conn 。
-
在方案对象类型的列表中,展开表。
-
在表的列表中,选择 SEMANTICS_BYTE 。
在“连接”窗格的右侧,“列”窗格显示对于“列名”SOME_DATA,“数据类型”为
VARCHAR2(20 BYTE)。 -
将 NLS_LENGTH_SEMANTICS 的值更改为
CHAR:ALTER SESSION SET NLS_LENGTH_SEMANTICS=CHAR; -
创建另外一个包含 VARCHAR2 列的表:
CREATE TABLE SEMANTICS_CHAR(SOME_DATA VARCHAR2(20)); -
在“连接”框架中,单击“刷新”图标。
表的列表现在包括 SEMANTICS_CHAR。
-
选择 SEMANTICS_CHAR 。
“列”窗格显示对于“列名”SOME_DATA,“数据类型”为
VARCHAR2(20 CHAR)。 -
再次选择 SEMANTICS_BYTE 。
“列”窗格显示对于“列名”SOME_DATA,“数据类型”仍为
VARCHAR2(20 BYTE)。 - 将 NLS_LENGTH_SEMANTICS 的值设置为其在步骤 1 中所具有的值。
另请参见:
-
Oracle Database Globalization Support Guide(了解有关 NLS_LENGTH_SEMANTICS 参数的详细信息)
-
“关于长度语义”