首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NLS_LANG和NLS_CHARACTERSET

NLS_LANG和NLS_CHARACTERSET
EN

Database Administration用户
提问于 2018-06-06 12:32:07
回答 2查看 11.4K关注 0票数 2

我想我读到了NLS_CHARACTERSET有数据库的编码,NLS_LANG有客户机的编码。对吗?

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

在其他一些文档中,我看到NLS_LANG是由NLS_CHARACTERSET定义的。哪个断言是正确的?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2018-06-06 14:55:35

要理解NLS参数可能非常繁琐,我建议在正式文档中搜索“设置全球化支持环境”这个术语。

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

NLS_LANG

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

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

代码语言:javascript
复制
NLS_LANG=AMERCICAN_AMERICA.US7ASCII

语言

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

领地

领土影响默认日期、货币值设置(例如$符号)和数字格式(例如,显示300万点12的3,000,000.12 )。

Character_Set

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

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

摘要NLS_LANG

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

代码语言:javascript
复制
 Employee     | Employment Start    | Salary
--------------+---------------------+--------
 Michael Ward | 2018-01-01          | 100240

...then如果客户端将AMERICAN_AMERICA.US7ASCI设置为NLS_LANG设置,则查询此表将返回:

代码语言:javascript
复制
 Employee     | Employment Start     | Salary
--------------+----------------------+-------------
 Michael Ward | 01-JAN-18            | 100,240

...whereas设置为FRENCH_FRANCE.WE8ISO8859P1将导致:

代码语言:javascript
复制
 Employee     | Employment Start     | Salary
--------------+----------------------+-------------
 Michael Ward | 01/01/18             | 100'240

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

NLS_CHARACTERSET

NLS_CHARACTERSET参数是在创建数据库实例期间设置的,以后不应该更改。(它可以更改,但即使在数据字典对象中也会导致数据损坏)。中的数据编码。

NLS_CHARACTERSET参数

表的CHARVARCHAR2LONGCLOB列。

NLS_NCHAR_CHARACTERSET参数

表的NCHARNVARCHAR2NCLOB列。

摘要NLS_CHARACTERSET

该参数用于告诉RDBMS系统,用该系统编码它可以将数据存储在某些列中。

我故意忽略了关于NLS_CHARACTERSET的大部分解释,因为在比较AL8UTF8__、AL32UTF8AL16UTF16 (只能与NLS_NCHAR_CHARACTERSET参数一起使用)和所有其他可能的Unicode设置时,它变得非常复杂。

比较

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

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

回答你的问题

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

是的,你可以有两种完全不同的编码。您可以使用NLS_CHARACTERSET = AL32UTF8设置来存储数据,还可以使用NLS_LANG=American_America.US7ASCII显示数据并将其传输到数据库。

显示与存储

票数 5
EN

Database Administration用户

发布于 2018-06-06 13:20:38

他们可以是不同的。简短的解释是,这些字符存储在由NLS_CHARACTERSET定义的数据库中。如果客户端无法使用此字符集。NLS_LANG也持有区域。如果客户端使用数据库所期望的不同的货币、日期格式、小数点/逗号,那么这也可能有所不同。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/208894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档