Chinaunix首页 | 论坛 | 博客
  • 博客访问: 611610
  • 博文数量: 103
  • 博客积分: 2269
  • 博客等级: 大尉
  • 技术积分: 1108
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-23 16:32
文章分类

全部博文(103)

文章存档

2012年(61)

2011年(42)

分类: Oracle

2011-10-18 18:23:48

Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。
ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。
它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。   
影响oracle数据库字符集最重要的参数是 NLS_LANG 参数。

1. NLS_LANG 参数组成
NLS_LANG参数由以下部分组成:
NLS_LANG=_.
三个组成部分(语言、地域、字符集),每个成分控制了NLS子集的特性。
Language:指定Oracle消息使用的语言,校验,日期中月份和日显示。[指定服务器消息的语言]
Territory:指定默认日期、数字、货币等格式,地区和计算星期及日期的习惯。[指定服务器的日期和数字格式]
Client character set:控制客户端应用程序使用的字符集。[指定字符集]
从 NLS_LANG 的组成我们可以看出,真正影响数据库字符集的其实是第三部分。
所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。
例如:NLS_LANG=AMERICAN_AMERICA.AL32UTF8
AMERICAN 是语言, AMERICA 是地区, AL32UTF8 是客户端字符集
常用中文字符集 NLS_LANG="SIMPLIFIED CHINESE_CHINA".ZHS16GBK
常用 unicode 字符集 NLS_LANG="AMERICAN_AMERICA".AL32UTF8

字符集的涵盖面:
涉及到 oracel server 端的字符集与 oracle client 端的字符集以及导出数据中的dmp文件的字符集;

在做导出导入的时候,需要这三个字符集都一致才能正确安全的进行数据操作;


2.管理客户端的 NLS_LANG 的方法
windows 使用:
注册表 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\NLS_LANG
xx 指存在多个ORACLE_HOME 时系统编号。
修改,直接编辑注册表的内容;
unix 使用: (oracle用户)
$cd /opt/oracle
$env|grep NLS_LANG
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
修改,直接编辑环境变量文件:
$vi .bash_profile
NLS_LANG="SIMPLIFIED CHINESE_CHINA".ZHS16GBK
export NLS_LANG
$source .bash_profile

3.查看数据库当前字符集参数设置
select * from v$nls_parameters;
4.查看数据库可用字符集参数设置
select * from v$nls_valid_values;

5.管理数据库服务器的字符集
查询数据库服务器字符集
SQL> select * from nls_database_parameters;
修改数据库服务器字符集
SQL> startup nomount;
SQL> alter database mount exclusive;
SQL> alter system set nls_language = "SIMPLIFIED CHINESE" SCOPE=SPFILE;
SQL> alter system set nls_territory = "CHINA" SCOPE=SPFILE;
SQL> alter database character set ZHS16GBK;
SQL> alter database open;

[Q]怎么样查看数据库字符集
[A]
数据库服务器字符集 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。

[Q]怎么样修改字符集
[A]8i 以上版本可以通过alter database 来修改字符集,但也只限于子集到超集,不建议修改props$表,将可能导致严重错误。
startup nomount;
alter database mount exclusive;
alter system enable restricted session;
alter system set job_queue_processes=0;
alter database open;
alter database character set zhs16gbk;

阅读(1151) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~