如何修改数据库的字符集

[复制链接]
查看11 | 回复9 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
比如我原来是ZHS16GBK
现在要改为 ZHS16CGB231280
请给出具体步骤
谢谢
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
在注册表中修改!应该可以在v$parameter表中修改name=nls_language的值就可以!
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
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;
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
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;
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
你为什么要做这种字符集的转换?GB231280字符集能显示的汉字比GBK少多了,有很多汉字输入后编程???所以劝你别这样该,由gb231280改为gbk是常有的事情。我就做过。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
我用另一个数据库做实验
原来是ZHS16CGB231280
现想改为ZHS16GBK
我用了以上步骤
当我运行完
alter database character set ZHS16GBK
抱错
ORA-12712: new character set must be a superset of old character set
zhs16gbk 不是 zhs16cgb231280 的超集吗
怎么回事
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
Export your database;
create new database use new character set;
set nls_lang;
import your data.
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
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

8.1.6 Subset/Superset Pairs
===========================
A. Current Char set
B. New Char set (Superset of A.)
-------------------
--------------------------------
US7ASCII
WE8DEC
US7ASCII
US8PC437
US7ASCII
WE8PC850
US7ASCII
IN8ISCII
US7ASCII
WE8PC858
US7ASCII
WE8ISO8859P1
US7ASCII
EE8ISO8859P2
US7ASCII
SE8ISO8859P3
US7ASCII
NEE8ISO8859P4
US7ASCII
CL8ISO8859P5
US7ASCII
AR8ISO8859P6
US7ASCII
EL8ISO8859P7
US7ASCII
IW8ISO8859P8
US7ASCII
WE8ISO8859P9
US7ASCII
NE8ISO8859P10
US7ASCII
TH8TISASCII
US7ASCII
BN8BSCII
US7ASCII
VN8VN3
US7ASCII
VN8MSWIN1258
US7ASCII
WE8ISO8859P15
US7ASCII
WE8NEXTSTEP
US7ASCII
AR8ASMO708PLUS
US7ASCII
EL8DEC
US7ASCII
TR8DEC
US7ASCII
LA8PASSPORT
US7ASCII
BG8PC437S
US7ASCII
EE8PC852
US7ASCII
RU8PC866
US7ASCII
RU8BESTA
US7ASCII
IW8PC1507
US7ASCII
RU8PC855
US7ASCII
TR8PC857
US7ASCII
CL8MACCYRILLICS
US7ASCII
WE8PC860
US7ASCII
IS8PC861
US7ASCII
EE8MACCES
US7ASCII
EE8MACCROATIANS
US7ASCII
TR8MACTURKISHS
US7ASCII
EL8MACGREEKS
US7ASCII
IW8MACHEBREWS
US7ASCII
EE8MSWIN1250
US7ASCII
CL8MSWIN1251
US7ASCII
ET8MSWIN923
US7ASCII
BG8MSWIN
US7ASCII
EL8MSWIN1253
US7ASCII
IW8MSWIN1255
US7ASCII
LT8MSWIN921
US7ASCII
TR8MSWIN1254
US7ASCII
WE8MSWIN1252
US7ASCII
BLT8MSWIN1257
US7ASCII
N8PC865
US7ASCII
BLT8CP921
US7ASCII
LV8PC1117
US7ASCII
LV8PC8LR
US7ASCII
LV8RST104090
US7ASCII
CL8KOI8R
US7ASCII
BLT8PC775
US7ASCII
WE8DG
US7ASCII
WE8NCR4970
US7ASCII
WE8ROMAN8
US7ASCII
WE8MACROMAN8S
US7ASCII
TH8MACTHAIS
US7ASCII
HU8CWI2
US7ASCII
EL8PC437S
US7ASCII
LT8PC772
US7ASCII
LT8PC774
US7ASCII
EL8PC869
US7ASCII
EL8PC851
US7ASCII
CDN8PC863
US7ASCII
HU8ABMOD
US7ASCII
AR8ASMO8X
US7ASCII
AR8NAFITHA711T
US7ASCII
AR8SAKHR707T
US7ASCII
AR8MUSSAD768T
US7ASCII
AR8ADOS710T
US7ASCII
AR8ADOS720T
US7ASCII
AR8APTEC715T
US7ASCII
AR8NAFITHA721T
US7ASCII
AR8HPARABIC8T
US7ASCII
AR8NAFITHA711
US7ASCII
AR8SAKHR707
US7ASCII
AR8MUSSAD768
US7ASCII
AR8ADOS710
US7ASCII
AR8ADOS720
US7ASCII
AR8APTEC715
US7ASCII
AR8MSAWIN
US7ASCII
AR8NAFITHA721
US7ASCII
AR8SAKHR706
US7ASCII
AR8ARABICMACS
US7ASCII
LA8ISO6937
US7ASCII
JA16VMS
US7ASCII
JA16EUC
US7ASCII
JA16SJIS
US7ASCII
KO16KSC5601
US7ASCII
KO16KSCCS
US7ASCII
KO16MSWIN949
US7ASCII
ZHS16CGB231280
US7ASCII
ZHS16GBK
US7ASCII
ZHT32EUC
US7ASCII
ZHT32SOPS
US7ASCII
ZHT16DBT
US7ASCII
ZHT32TRIS
US7ASCII
ZHT16BIG5
US7ASCII
ZHT16CCDC
US7ASCII
ZHT16MSWIN950
US7ASCII
AL24UTFFSS
US7ASCII
UTF8
US7ASCII
JA16TSTSET2
US7ASCII
JA16TSTSET

8.1.7 Additions
===============
US7ASCII
ZHT16HKSCS
US7ASCII
KO16TSTSET
WE8DEC
TR8DEC
WE8DEC
WE8NCR4970
WE8PC850
WE8PC858
D7DEC
D7SIEMENS9780X
I7DEC
I7SIEMENS9780X
WE8ISO8859P1
WE8MSWIN1252
AR8ISO8859P6
AR8ASMO708PLUS
AR8ISO8859P6
AR8ASMO8X
IW8EBCDIC424
IW8EBCDIC1086
IW8EBCDIC1086
IW8EBCDIC424
LV8PC8LR
LV8RST104090
DK7SIEMENS9780X
N7SIEMENS9780X
N7SIEMENS9780X
DK7SIEMENS9780X
I7SIEMENS9780X
I7DEC
D7SIEMENS9780X
D7DEC
WE8NCR4970
WE8DEC
WE8NCR4970
TR8DEC
AR8SAKHR707T
AR8SAKHR707
AR8MUSSAD768T
AR8MUSSAD768
AR8ADOS720T
AR8ADOS720
AR8NAFITHA711
AR8NAFITHA711T
AR8SAKHR707
AR8SAKHR707T
AR8MUSSAD768
AR8MUSSAD768T
AR8ADOS710
AR8ADOS710T
AR8ADOS720
AR8ADOS720T
AR8APTEC715
AR8APTEC715T
AR8NAFITHA721
AR8NAFITHA721T
AR8ARABICMAC
AR8ARABICMACT
AR8ARABICMACT
AR8ARABICMAC
KO16KSC5601
KO16MSWIN949
WE16DECTST2
WE16DECTST
WE16DECTST
WE16DECTST2

9.0.1 Additions
===============
US7ASCII
BLT8ISO8859P13
US7ASCII
CEL8ISO8859P14
US7ASCII
CL8ISOIR111
US7ASCII
CL8KOI8U
US7ASCII
AL32UTF8
BLT8CP921
BLT8ISO8859P13
US7ASCII
AR8MSWIN1256

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]

回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
zhs16cgb231280 的数据库字符集可以使用
NLS_LANG设置为ZHS16GBK exp吗?
虽然从楼上的帖子,看,理论上这两个不存在超集关系,但又似乎见有人说可以这样做。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
原帖由 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 的超集吗
怎么回事


ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GB
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行