字符集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、该转换不可逆,所以在做这个操作以前建议做数据库全备份
本文介绍在Oracle数据库中从WE8ISO8859P1字符集转换到ZHS16GBK字符集的过程及注意事项,包括如何正确更改字符集设置以支持中文。

4746

被折叠的 条评论
为什么被折叠?



