您的位置:首页 > 数据库 > Oracle

Linux下更改oracle客户端字符集和服务端字符集

2011-01-27 14:16 381 查看
Linux

下更改

oracle

客户端字符集和服务端字符集

1.Linux

下更改
oracle

客户端字符集,即设置环境变量“
NLS_LANG“

的值

查看客户端字符集,在终端下执行:

echo
$NLS_LANG

修改客户端字符集:

sudo
gedit /etc/environment

在environment
文件中增加以下内容:

NLS_LANG="SIMPLIFIED
CHINESE_CHINA.ZHS16GBK"

export
NLS_LANG

重新启动操作系统即可。

2.

修改
oracle


服务端的字符集。

查看服务端字符集:

select
userenv('language') from dual;

修改服务端字符集,终端下执行:

$ORACLE_HOME/bin/sqlplus
/nolog

进入sqlplus
命令行

SQL>conn
/ as sysdba;

1
)
.

关闭数据库

SQL>SHUTDOWN
IMMEDIATE;

2
)
.


启动到
Mount


STARTUP
MOUNT;

ALTER
SYSTEM ENABLE RESTRICTED SESSION;

ALTER
SYSTEM SET JOB_QUEUE_PROCESSES=0;

ALTER
SYSTEM SET AQ_TM_PROCESSES=0;

ALTER
DATABASE OPEN;

ALTER
DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;

--
下面一行语句可能会出现错误提示,可以不理会

ALTER
DATABASE national CHARACTER SET INTERNAL ZHS16GBK;

SHUTDOWN
IMMEDIATE;

STARTUP;

3.

修改
dmp

文件字符集

dmp
文件的第2
第3
字节记录了字符集信息,因此直接修改dmp
文件的第2
第3
字节的内容就可以‘骗’过oracle
的检查。这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,如
US7ASCII
,WE8ISO8859P1
,ZHS16CGB231280
,ZHS16GBK
基本都可以改。因为改的只是dmp
文件,所以影响不大。

具体的修改方法比较多,最简单的就是直接用UltraEdit
修改dmp
文件的第2
和第3
个字节。比如想将dmp
文件的字符集改为ZHS16GBK
,可以用以下SQL
查出该种字符集对应的16
进制代码:

SQL>
select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;

0354

然后将dmp
文件的2
、3
字节修改为0354
即可。



Oracle

提供标准函数,对字符集名称及
ID

进行转换
:

SQL>
select nls_charset_id('ZHS16GBK') from dual;

NLS_CHARSET_ID('ZHS16GBK')

--------------------------

852

1
row selected.

SQL>
select nls_charset_name(852) from dual;

NLS_CHAR

--------

ZHS16GBK

1
row selected.

十进制转换十六进制
:

SQL>
select to_char('852','xxxx') from dual;

TO_CH

-----

354

参考文章:
《Oracle

字符集的查看和修改》:
http://blog.csdn.net/tianlesoftware/archive/2009/12/02/4915223.aspx

《字符集问题的初步探讨(
五)-
导出文件字符集》: http://www.eygle.com/special/NLS_CHARACTER_SET_05.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: