NLS_LANG 和 NLS_CHARACTERSET

mlw*_*mos 2 oracle encoding

我以为我读到NLS_CHARACTERSET了数据库NLS_LANG的编码和客户端的编码。那是对的吗?

这是否意味着两种编码可以不同?

在其他一些文档中,我读到NLS_LANG是由NLS_CHARACTERSET. 哪个断言是正确的?

Joh*_* N. 5

NLS 参数可能很难理解,我建议在官方文档中搜索术语“设置全球化支持环境”。

NLS 是 National Language Support 的缩写,是各种 Oracle 产品中可用的多个参数的开头。


NLS_LANG

NLS_LANG被描述为定义<LANGUAGE>_<TERRITORY>.<CHARACTER_SET>客户端环境的变量。

一个有效的 NLS_LANG 设置的例子是:

NLS_LANG=AMERCICAN_AMERICA.US7ASCII
Run Code Online (Sandbox Code Playgroud)

变量的各个部分定义了 Oracle 如何显示信息。如果您<LANGUAGE>是,AMERICAN则消息、日期和月份将使用美式拼写显示。排序也受这部分参数影响

领土

区域会影响默认日期、货币值设置(例如$符号)和数字格式(例如3,000,000.12显示 300 万点 12)等内容

字符集

这是它变得非常有趣的一点。NLS_LANG 参数的这部分被描述为

...客户端应用程序使用的字符集。

摘要 NLS_LANG

因此,本质上您是在配置客户端如何显示存储在数据库中的数据。如果您的数据库包含以下数据:

 Employee     | Employment Start    | Salary
--------------+---------------------+--------
 Michael Ward | 2018-01-01          | 100240
Run Code Online (Sandbox Code Playgroud)

...然后如果您的客户端具有AMERICAN_AMERICA.US7ASCI作为NLS_LANG设置,则查询此表将返回:

 Employee     | Employment Start     | Salary
--------------+----------------------+-------------
 Michael Ward | 01-JAN-18            | 100,240
Run Code Online (Sandbox Code Playgroud)

...而有一个设置FRENCH_FRANCE.WE8ISO8859P1会导致:

 Employee     | Employment Start     | Salary
--------------+----------------------+-------------
 Michael Ward | 01/01/18             | 100'240
Run Code Online (Sandbox Code Playgroud)

让我们跟进另一个参数......


NLS_CHARACTERSET

NLS_CHARACTERSET参数是在创建数据库实例期间设置的,此后不应更改。(它可以更改,但即使在 DATA DICTIONARY 对象中也可能导致数据损坏)。该参数定义了数据的编码...

NLS_CHARACTERSET 参数

... CHAR, VARCHAR2,LONGCLOB表的列。

NLS_NCHAR_CHARACTERSET 参数

... NCHARNVARCHAR2以及NCLOB表的列。

摘要 NLS_CHARACTERSET

该参数用于告诉 RDBMS 系统使用哪种编码将数据存储在某些列中。

我有意留下了大部分关于NLS_CHARACTERSETout的解释,因为在比较AL8UTF8, AL32UTF8and AL16UTF16(只能与NLS_NCHAR_CHARACTERSET参数结合使用)和所有其他可能的 Unicode 设置之间的编码时,它变得非常复杂。


比较

从数据库列检索数据时,NLS_LANG会将所有花里胡哨(日期格式、时间格式、数字格式)添加到正在检索的数据中。

NLS_CHARACTERSET参数定义将数据存储在列中的编码。(ASCII,Unicode,...)

回答你的问题

这是否意味着两种编码可以不同?

是的,您可以有两种完全不同的编码。您可以使用 的设置存储数据,NLS_CHARACTERSET = AL32UTF8并且仍然使用NLS_LANG=American_America.US7ASCII.

显示与存储