[转] 关于oracle 字符集(NLS_LANGUAGE)问题的探讨

关于oracle 字符集(NLS_LANGUAGE)问题的探讨
--------------------------------------------------------------------------------
nls_database_parameters、nls_instance_parameters、nls_session_parameters
--------------------------------------------------------------------------------

今天,在网上搜索关于nls视图的相关内容,结果越查越糊涂,无奈下,还是自己动手做一下。

首先,我们看一下,这三个视图的sql定义:

sys> select view_name,text from dba_views where view_name like ‘NLS%‘; 
     
VIEW_NAME                             TEXT 
------------------------- -------------------------------------------------- 
NLS_SESSION_PARAMETERS    select substr(parameter, 1, 30),  
                                                      substr(value, 1, 40)  
                                               from v$nls_parameters  
                                               where parameter != ‘NLS_CHARACTERSET‘ and  
                                               parameter != ‘NLS_NCHAR_CHARACTERSET‘
     
NLS_INSTANCE_PARAMETERS   select substr(upper(name), 1, 30),  
                                                      substr(value, 1, 40)  
                                               from v$system_parameter  
                                               where name like ‘nls%‘
     
     
VIEW_NAME                               TEXT 
------------------------- -------------------------------------------------- 
NLS_DATABASE_PARAMETERS   select name,  
                                                 substr(value$, 1, 40)  
                                               from props$  
                                               where name like ‘NLS%‘

可以看出:

nls_database_parameters取值于props$, 即我们创建数据库时存储在数据库中的信息,这与环境变量和参数文件等是统统没有关系的。

nls_instance_parameters取值于v$system_parameter,下面让我们看一下v$system_parameter 在官方文档的定义:

V$SYSTEM_PARAMETER displays information about the initialization parameters that are currently in effect for the instance.

A new session inherits parameter values from the instance-wide values.

从这里,我们可知,nls_instance_parameters的值有参数文件决定,那么会不会受到环境变量的影响哪?

经验证,是不会的!过程如下:

首先,我们来看一下NLS_LANGUAGE的取值

sys>select parameter,value from nls_instance_parameters where parameter=‘NLS_LANGUAGE‘; 
     
PARAMETER                     VALUE 
------------------------------ ------------------------------ 
NLS_LANGUAGE               SIMPLIFIED CHINESE

关闭数据库,然后修改环境变量NLS_LANG:

sys>shutdown immediate

sys>exit  
 
[[email protected] ~]$ vi .bash_profile 
[[email protected] ~]$ . .bash_profile 
[[email protected] ~]$ set | grep NLS 
NLS_DATE_FORMAT=‘YYYY-MM-DD HH24:MI:SS‘
NLS_LANG=AMERICAN_AMERICA.AL32UTF8

[[email protected] ~]$ sqlplus / as sysdba  
     
SQL> startup

SQL> select parameter,value from nls_instance_parameters where parameter=‘NLS_LANGUAGE‘; 
     
PARAMETER                     VALUE 
------------------------------ ------------------------------ 
NLS_LANGUAGE               SIMPLIFIED CHINESE

可见,nls_instance_parameters只受参数文件的影响,而不受环境变量影响。

nls_session_parameters取值于V$NLS_PARAMETERS, 它的查询结果默认会从nls_instance_parameters继承,但是如果,我们在环境变量或者

通过ALTER SESSION 改变了nls的相关参数,则会覆盖默认值。

例如,当环境变量NLS_LANG=AMERICAN_AMERICA.AL32UTF8

SQL> select parameter,value from nls_session_parameters where parameter=‘NLS_LANGUAGE‘; 
     
PARAMETER                     VALUE 
------------------------------ ------------------------------ 
NLS_LANGUAGE               AMERICAN

当环境变量NLS_LANG=‘SIMPLIFIED CHINESE_CHINA.AL32UTF8‘

SQL> select parameter,value from nls_session_parameters where parameter=‘NLS_LANGUAGE‘; 
     
PARAMETER                     VALUE 
------------------------------ ------------------------------ 
NLS_LANGUAGE               SIMPLIFIED CHINESE

来源: csdn   作者:易点

[转] 关于oracle 字符集(NLS_LANGUAGE)问题的探讨

时间: 2024-08-01 11:28:19

[转] 关于oracle 字符集(NLS_LANGUAGE)问题的探讨的相关文章

oracle 字符集

---- 在国内外大中型数据库管理系统中,把ORACLE作为数据库管理平台的用户比较多.ORACLE 不论是数据库管理能力还是安全性都是无可非议的,但是,它在汉字信息的显示方面着实给中国用户带来不少麻烦,笔者多年从事ORACLE数据库管理,经常收到周围用户和外地用户反映有关ORACLE数据库汉字显示问题的求援信,主要现象是把汉字显示为不可识别的乱码,造成原来大量信息无法使用.本文将就这一问题产生的原因和解决办法进行一些探讨,供存在这方面问题的用户朋友参考. ---- 1.原因分析  ---- 通

Oracle字符集(总结)

1.数据库字符集 数据库字符集包括两个字符集:数据库字符集和国家字符集,都是在创建数据库的时候指定的. 1.1.查询当前数据库的字符集 [email protected]>col value for a30 [email protected]>select * from nls_database_parameters 2   where parameter in('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET'); PARAMETER           

Oracle字符集的查看查询和Oracle字符集的设置修改

本文主要讨论以下几个部分:如何查看查询oracle字符集. 修改设置字符集以及常见的oracle utf8字符集和oracle exp 字符集问题. 一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台. 影响Oracle数据库字符集最重要的参数是NLS_LANG参数.

Oracle 字符集小结(遇到一例子:查询结果列标题为汉字,但是显示为‘?')

问题处理方式: 查询:select userenv('language') from dual; 对比电脑环境变量NLS_LANG的值与查询结果是否一致,如果不一致,修改电脑环境变量NLS_LANG 问题解决后通过查询资料对会话字符做了一些总结: 字符集分可为三类: 1.数据库服务器字符集: SELECT * FROM NLS_DATABASE_PARAMETERS NLS_DATABASE_PARAMETERS其来源于props$,是表示数据库的字符集. 2.客户端字符集环境 SELECT *

ORACLE学习之九 Oracle 字符集的查看和修改 (转帖)

一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台. 影响Oracle数据库字符集最重要的参数是NLS_LANG参数. 它的格式如下: NLS_LANG = language_territory.charset 它有三个组成部分(语言.地域和字符集),每个成分控制了NL

修改Oracle字符集

新安装的数据库,导入数据之后,发现插入汉字部分是乱码.由于本地数据时正常显示的,没有乱码.因此断定是数据库字符集的问题. 1.  查看数据库的字符集: 发现是西欧编码.8位(一个字节).ISO标准8859P1编码.他的编码方案是适合欧洲大部分国家. 又查询了一下本地数据库的编码格式,发现是ZHS16GBk编码格式. 在这里解释一下字符集,Oracel最早支持的编码方案是US7ASCII. 再解释一下Oracle字符集的命名遵循以下命名规则: <Language><bit size>

Oracle 字符集的查看和修改

一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台. 影响Oracle数据库字符集最重要的参数是NLS_LANG参数. 它的格式如下: NLS_LANG = language_territory.charset 它有三个组成部分(语言.地域和字符集),每个成分控制了NL

oracle字符集查看修改

一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台. 影响Oracle数据库字符集最重要的参数是NLS_LANG参数. 它的格式如下: NLS_LANG = language_territory.charset 它有三个组成部分(语言.地域和字符集),每个成分控制了NL

Oracle 字符集的查看和修改 (转)

一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台. 影响Oracle数据库字符集最重要的参数是NLS_LANG参数. 它的格式如下: NLS_LANG = language_territory.charset 它有三个组成部分(语言.地域和字符集),每个成分控制了NL