oracle的字符集:WE8ISO8859P1 , ZHS16GBK

本文介绍在Oracle数据库中从WE8ISO8859P1字符集转换到ZHS16GBK字符集的过程及注意事项,包括如何正确更改字符集设置以支持中文。

字符集WE8ISO8859P1 是不能改为ZHS16GBK的

(http://space.itpub.net/12548713/viewspace-127562)

 

linux安装oracle时没有更改默认的字符集。
不支持中文
SQL> select * from t
  2  ;

ID
----------------------------------------------------------------
NAME
--------------------------------------------------------------------------------
1d2a
£?£?


1.查看系统字符集
select * from v$nls_parameters
select name,value$ from sys.props$ where name='NLS_CHARACTERSET'
NAME
------------------------------------------------------------
VALUE$
--------------------------------------------------------------------------------
NLS_CHARACTERSET
WE8ISO8859P1

(应该改为ZHS16GBK)
select nls_charset_name(1) from dual;
NLS_CHARSET_NAME
----------------
US7ASCII

2.更改字符集合  (参考了eygle的文章)

(过程不可逆  先备份

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP MOUNT;
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218992 bytes
Variable Size             104859216 bytes
Database Buffers          176160768 bytes
Redo Buffers                2973696 bytes
Database mounted.
SQL> ALTER SESSION SET SQL_TRACE=TRUE;

Session altered.

SQL>  ALTER SYSTEM ENABLE RESTRICTED SESSION;

System altered.

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

System altered.

SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;

System altered.

SQL> ALTER DATABASE OPEN;

Database altered.

SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE CHARACTER SET ZHS16GBK
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set


SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE CHARACTER SET ZHS16GBK
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set


SQL> ALTER DATABASE CHARACTER SET UTF8
  2  ;
ALTER DATABASE CHARACTER SET UTF8
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set


SQL> ALTER DATABASE CHARACTER SET UTF-8
  2  ;
ALTER DATABASE CHARACTER SET UTF-8
                                *
ERROR at line 1:
ORA-00933: SQL command not properly ended


 


SQL> ALTER DATABASE CHARACTER SET WE8MSWIN1252;

Database altered.

SQL> COMMIT;

Commit complete.

(可以更改 但是还不支持中文)

SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218992 bytes
Variable Size             104859216 bytes
Database Buffers          176160768 bytes
Redo Buffers                2973696 bytes
Database mounted.
Database opened.

(看来只能重建实例了)

 

如何将字符集为AMERICAN_AMERICA.WE8ISO8859P1的数据库转为SIMPLIFIED CHINESE_CHINA.ZHS16GBK的字符集?

(http://topic.csdn.net/t/20020311/23/569408.html)

 

------------------------------------
1 字符集是在数据库建立的时候设定的,一旦数据库生成,就不可能改了。所以你的要求只能是重建数据库,然后倒入原来的数据。(虽然字符集不同,但是有办法倒入,请查CSDN的有关贴子)  
 
------------------------------------
1   please   do   step   by   step:  
                con   sys/change_on_install  
                desc   props$  
                col   value$   format   a30  
        if   the   NLS_CHARACTERSET   is   not   ZHS16GBK,then  
                update   props$   set   value$='ZHS16GBK'   where   name   =   'NLS_CHARACTERSET   ';  
   
  2     run   'regedit'  
        find   HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE  
        identify   the   'NLS_LANG'   whether   SIMPLIFIED   CHINESE_CHINA.ZHS16GBK   or   not,if   not,   modify    
   
     
 
------------------------------------
楼上说的是改NLS_LANG的方法,但是CHARACTER_SET好像是没有办法改的。

------------------------------------
是可以改!  
  ALTER   DATABAE   CHARACTER   SET   SIMPLIFIED_CHINESE_CHINA.ZHS16GBK   ;  
  不过,相反的操作可不行!

------------------------------------
ALTER   DATABAE   CHARACTER   SET   SIMPLIFIED   CHINESE_CHINA.ZHS16GBK   ;    


------------------------------------
没有不可以改的:  
  update   props$   set   value$='ZHS16CGB231280'    
  where   name='NLS_CHARACTERSET';  
  update   props$   set   value$='ZHS16CGB231280'    
  where     name='NLS_NCHAR_CHARACTERSET';


------------------------------------
果然是可以的,看来我从Oracle7学到的知识要全面刷新。。。  
   
  几点注意事项:  
  1、执行ALTER   DATABASE   CHARACTER   SET必须有SYSDBA权限,并且在STARTUP   RESTRICT模式下执行  
  2、原字符集必须是目标字符集的一个真子集(就是浪子所说的只能从WE8ISO8859P1转到ZHS16GBK的原因)  
  3、CLOB字段装换可能有问题,建议在转换以前把有CLOB字段的表导出后DROP,转换以后再导回  
  4、该转换不可逆,所以在做这个操作以前建议做数据库全备份  
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值