环境:服务端:redhat6.3、oracle11g
客户端:windos XP、 plsql
在装有oracle客户端的机器上,打开注册表:regedit
注册表中搜索:NLS_LANG
或者通过路径查找NLS_LANG:HKEY_LOCAL_MACHINE ---》SOFTWARE ---》 ORACLE
结果页面如下:
值为:CHINESE_CHINA.ZHS16GBK
影响Oracle数据库字符集最重要的参数是NLS_LANG参数。
它的格式如下: NLS_LANG =language_territory.charset
它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。
其中:
Language:指定服务器消息的语言,影响提示信息是中文还是英文
Territory:指定服务器的日期和数字格式,
Charset:指定字符集。
如:AMERICAN _ AMERICA. ZHS16GBK
从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。
所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文
Plsql中运行如下sql:
selectuserenv('language')from dual;
查询结果如下:
编辑注册表中的NLS_LANG值(要注意必须是ORACLE-HOME目录下的)
Regedit.exe ---》 HKEY_LOCAL_MACHINE ---》SOFTWARE ---》 ORACLE-HOME
或者在Dos窗口下运行:
set nls_lang=AMERICAN_AMERICA.ZHS16GBK
有时是oracle免安装客户端,没有oracle-home、注册表中也查询不到nls_lang,可以用如下方法:
可以新增环境变量:
变量名:NLS_LANG
变量值:SIMPLIFIED CHINESE_CHINA.AL32UTF8
值为想要变成的字符集。
4 服务端字符集的修改
修改时,修改后的字符集须是修改前的超集,如AL32UTF8是ZHS16GBK的超集,则可以修改。
要用oracle自带的plsql去执行命令,用户为sys,执行如下命令:
SQL> ALTER DATABASE character set INTERNAL_USE AL32UTF8;