oracle的理论上是不允许,只能重新安装数据库。
另一个办法(不提倡),需要后面的字符集是前面的超集。
查看服务器端字符集
svrmgrl;
svrmgrl>connect internal;
svrmgrl>select * from props$;
NAME VALUE$
------------------------------ ---------------
NLS_CHARACTERSET ZHS16CGB231280
找到NAME为NLS_CHARACTERSET,VALUE$为字符集设置值。
注:ZHS16CGB231280为ZHS16GBK子集(中文字符集)。
svrmgrl>alter database ORCL character set ZHS16GBK;
svrmgrl>alter database ORCL national character set ZHS16GBK
.用PB数据管道、SQLLOAD之类的工具导接不同字符集数据库的数据,
虽然麻烦点,但效果却不会差。
update props$ set value$='ZHS16CGB231280' where name='NLS_CHARACTERSET';
update props$ set value$='ZHS16CGB231280' where name='NLS_NCHAR_CHARACTERSET';
前一段时间我写了一篇关于相关字符集的贴子,现在发现其中有小问题。会在export时报错。现将最新的修改公布于此:
环境:redhat linux 6.2 + oracle 8.1.6
步骤:1、修改.bash_profile中NLS_LANG项为你需要的字符集。
2、在服务器SVRMGRL中执行
SQL> SHUTDOWN IMMEDIATE; -- or NORMAL
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE CHARACTER SET ;
SQL> SHUTDOWN IMMEDIATE; -- or NORMAL
SQL> STARTUP;
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE CHARACTER SET ;
SQL> SHUTDOWN IMMEDIATE; -- or NORMAL
SQL> STARTUP;
我用另一个数据库做实验
原来是ZHS16CGB231280
现想改为ZHS16GBK
我用了以上步骤
当我运行完
alter database character set ZHS16GBK
抱错
ORA-12712: new character set must be a superset of old character set
zhs16gbk 不是 zhs16cgb231280 的超集吗
怎么回事
The command "ALTER DATABASE CHARACTER SET xxxxx"is only work in these cases:
1.the new character set = the old set
2.the old character set = US7ASCII
3.the new character set is the superset of the old set
The following listdescripe the relation between character set and its superset
Character Set Subset/Superset Pairs Obsolete from 9.0.1
=======================================================
US7ASCII
AR8MSAWIN
AR8ARABICMAC
AR8ARABICMACT
最初由 Rick1998 发布
[B]我用另一个数据库做实验
原来是ZHS16CGB231280
现想改为ZHS16GBK
我用了以上步骤
当我运行完
alter database character set ZHS16GBK
抱错
ORA-12712: new character set must be a superset of old character set
zhs16gbk 不是 zhs16cgb231280 的超集吗
怎么回事 [/B]
原帖由 Rick1998 于 2001-11-7 12:40 发表
我用另一个数据库做实验
原来是ZHS16CGB231280
现想改为ZHS16GBK
我用了以上步骤
当我运行完
alter database character set ZHS16GBK
抱错
ORA-12712: new character set must be a superset of old character set
zhs16gbk 不是 zhs16cgb231280 的超集吗
怎么回事