Oracle的字符集:nls_database_parameters、nls_instance_parameters、nls_session_parameters

1、字符集命名
Oracle的字符集命名遵循以下命名规则:

即: <语言><比特位数><编码>
比如: ZHS16GBK表示采用GBK编码格式、16位(两个字节)简体中文字符集
例如:AL32UTF8(其中AL代表ALL,指适用于所有语言)

NLS_LANG=CHINESE_CHINA.ZHS16GBK 
CHINESE是语言,CHINA是地区,ZHS16GBK 是客户端字符集 

NLS_CHARACTERSET是数据库字符集,
NLS_NCHAR_CHARACTERSET是国家字符集
ORACLE中有两大类字符型数据:
VARCHAR2是按照数据库字符集来存储数据;
NVARCHAR2是按照国家字符集存储数据的;
同样,CHAR和NCHAR也一样,一是数据库字符符,一是国家字符集。
字符集不同,二进制码的组合就不同。


2、三种字符集说明
(1).oracle服务器端字符集:
数据库字符集在创建数据库时指定,在创建后通常不能更改
服务器端字符集的命令是: select * from nls_database_parameters
nls_database_parameters取值与props$,
即我们创建数据库时存储在数据库中的熟悉信息,这与环境变量和参数文件等是统统没有关系的。
 
(2).oracle客户端字符集:
客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
客户端字符集的命令是: select * from nls_instance_parameters 
nls_instance_parameters取值与v$parameter
nls_instance_parameters的值由参数文件决定,那么会不会受到环境变量的影响呢?经验证,是不会的!

(3).oracle会话字符集:
会话字符集是继承客户端字符集,如果设置环境变量可以覆盖会话字符集
会话字符集的命令是: select * from nls_session_parameters
nls_session_parameters 来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,
如果会话没有特殊的设置,将与nls_instance_parameters一致。

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


3、修改字符集方法
3.1 修改server端字符集(不建议使用) 

  1. 关闭数据库
    SQL>SHUTDOWN IMMEDIATE
  
  2. 启动到Mount
    SQL>STARTUP MOUNT; 
    SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION; 
    SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; 
    SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0; 
    SQL>ALTER DATABASE OPEN; 
    --这里可以从父集到子集
    SQL>ALTER DATABASE CHARACTER SET ZHS16GBK; 
    SQL>ALTER DATABASE NATIONAL CHARACTER SET AL16UTF16; 
    --如果是从子集到父集,需要使用INTERNAL_USE 参数,跳过超子集检测
    SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8; 
    SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16;
    
    SQL>SHUTDOWN IMMEDIATE; 
    SQL>STARTUP


3.2客户端字符集设置方法
 1)UNIX环境
   $NLS_LANG=“simplified chinese”_china.zhs16gbk
   $export NLS_LANG
   编辑oracle用户的profile文件
 2)Windows环境
   编辑注册表
   Regedit.exe ---》 HKEY_LOCAL_MACHINE ---》SOFTWARE ---》 ORACLE--》HOME
   或者在窗口设置:
   set nls_lang=AMERICAN_AMERICA.ZHS16GBK 

你可能感兴趣的:(oracle,oracle)