Linux123

当前位置: 首页 > 数据库 > oracle >

nls_lang、nls_language、nls_characterset的区别

nls_lang、nls_language、nls_characterset的区别

oracle 数据库对字符的处理及表现形式分为三个层面,优先级先后分别是数据库初始化参数字符集、os操作系统环境变量级、session级

先说什么是字符集?字符集就是按照一定的字符编码方案,对一组特定的符号,分别赋予不同数值编码的集合。

格式为<语言><比特位数><编码 >
比如: ZHS16GBK表示采用GBK编码格式、16位(两个字节)简体中文字符集

数据库初始化参数字符集,在建数据库前指定的字符集,建立后通常不能修改,如果修改可以用命令alter database set character xxx; 不过这样修改有一定的危险,有可能会出现乱码造成数据的丢失,而且修改后的字符集一定是修改前的超集。如果未指定建库时会依赖os的设置。

session级作用域只是影响那个连接

nls_characterset设置服务器的字符集

nls_lang客户端字符集定义了客户端字符数据的编码方式,任何发自或发往客户端的字符数据均使用客户端定义的字符集编码,客户端可以看作是能与数据库直接连接的各种应用

NLS_NCHAR_CHARACTERS? 全球化的字符集默认为 AL16UTF16

nls_language是数据库内的默认语言 ,可能不易理解,下面是官方解释
NLS_LANGUAGE specifies the default language of the database. This language is used for messages, day and month names, symbols for AD, BC, a.m., and p.m., and the default sorting mechanism. This parameter also determines the default values of the parameters NLS_DATE_LANGUAGE and NLS_SORT.

查询相关的几个表
nls_database_parameters;
nls_session_parameters;

转自:http://wenku.baidu.com/view/f7afc11b650e52ea551898f0.html




oracle的字符集(NLS_LANGUAGE)

数据库服务器字符集
select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。

客户端字符集环境
select * from nls_instance_parameters,其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表。

会话字符集环境
select * from nls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,
可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。

客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。
如果多个设置存在的时候,alter session>环境变量>注册表>参数文件
字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。

注:

1.通过alter system set nls_language='AMERICAN' scope=spfile; 可以更改nls_database_parameters和nls_instance_parameters的nls_language

2. 通过alter session set nls_language='SIMPLIFIED CHINESE'; 可以更改nls_session_parameters的nls_language

转自:http://blog.csdn.net/zftang/article/details/6586524




关于nls_lang与nls_language的区别

一个是环境变量,一个是数据库参数。
 
nls_lang是在客户端设置客户端字符集,也就是在环境变量(Linux:~/.bash_profile)中。
 
nls_language在服务端设置,SERVER端的lang,属于parameter,可以由alter system set nls_language='...' scope=spfile 来修改。
 
nls_characterset也是设置服务器的字符集。

转自:http://bachue.is-programmer.com/posts/21202.html
------分隔线----------------------------
  • 收藏
  • 挑错
  • 推荐
  • 打印