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

heliang 2002-03-11 11:06:03
加精
如何将字符集为AMERICAN_AMERICA.WE8ISO8859P1的数据库转为SIMPLIFIED CHINESE_CHINA.ZHS16GBK的字符集?数据库内已经有近3年的数据,近500张表。
...全文
1734 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
KingSunSha 2002-03-14
  • 打赏
  • 举报
回复
去otn.oracle.com下载一些文档,字符集之间的关系在一篇Oracle Globalization Guide中最完整。
leah 2002-03-14
  • 打赏
  • 举报
回复
原字符集必须是目标字符集的一个真子集,什么地方可以查到这方面的资料呢?
我也想要,能给我发一份吗?dream06@sina.com,谢谢!
rwq_ 2002-03-14
  • 打赏
  • 举报
回复
我送过去了!
heliang 2002-03-14
  • 打赏
  • 举报
回复
to: rwq_(风云浪子)
能给一个地址吗? ORACLE的东东太多,找不到。
要不能否给小弟发一份? hl666@163.com (25M)
谢谢!
rwq_ 2002-03-14
  • 打赏
  • 举报
回复
我在ORACLE网站当的帮助文档上查找的!
heliang 2002-03-13
  • 打赏
  • 举报
回复
谢谢各位大哥的指点。
原字符集必须是目标字符集的一个真子集,什么地方可以查到这方面的资料呢?
rwq_ 2002-03-12
  • 打赏
  • 举报
回复
ALTER DATABAE CHARACTER SET SIMPLIFIED CHINESE_CHINA.ZHS16GBK ;
上面写错了!
rwq_ 2002-03-12
  • 打赏
  • 举报
回复
是可以改!
ALTER DATABAE CHARACTER SET SIMPLIFIED_CHINESE_CHINA.ZHS16GBK ;
不过,相反的操作可不行!
KingSunSha 2002-03-12
  • 打赏
  • 举报
回复
楼上说的是改NLS_LANG的方法,但是CHARACTER_SET好像是没有办法改的。
jianjian_zhn 2002-03-12
  • 打赏
  • 举报
回复
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


KingSunSha 2002-03-12
  • 打赏
  • 举报
回复
字符集是在数据库建立的时候设定的,一旦数据库生成,就不可能改了。所以你的要求只能是重建数据库,然后倒入原来的数据。(虽然字符集不同,但是有办法倒入,请查CSDN的有关贴子)
KingSunSha 2002-03-12
  • 打赏
  • 举报
回复
果然是可以的,看来我从Oracle7学到的知识要全面刷新。。。

几点注意事项:
1、执行ALTER DATABASE CHARACTER SET必须有SYSDBA权限,并且在STARTUP RESTRICT模式下执行
2、原字符集必须是目标字符集的一个真子集(就是浪子所说的只能从WE8ISO8859P1转到ZHS16GBK的原因)
3、CLOB字段装换可能有问题,建议在转换以前把有CLOB字段的表导出后DROP,转换以后再导回
4、该转换不可逆,所以在做这个操作以前建议做数据库全备份
eygle 2002-03-12
  • 打赏
  • 举报
回复
没有不可以改的:
update props$ set value$='ZHS16CGB231280'
where name='NLS_CHARACTERSET';
update props$ set value$='ZHS16CGB231280'
where name='NLS_NCHAR_CHARACTERSET';
KittyWang 2002-03-12
  • 打赏
  • 举报
回复
以后不要问关于字符集的问题啦,可以查文档中心,有现成的方案,很好的。
10 数据库服务器字符集更改步骤 问题描述: 在客户端插入字符“咪咪”,从数据库中查询显示时出现乱码 处理步骤: 10.1 对数据库做全库导出,备份全库数据,以防故障发生 首先设定客户端的字符集,必须以ZHS16GBK字符集导出,然后才能在更改失败后顺利倒入新建的库。 #setenv NLS_LANG "SIMPLIFIED CHINESE_CHINA.ZHS16GBK"; #stty -istrip -parity cs8; #setenv LANG zh 拟在/sybdata(磁盘阵列)下建立一个目录orabak,用于存放dmp文件。 #mkdir /sybdata/orabak #chown oracle:oinstall /sybdata/orabak #su – oracle #cd /sybdata/orabak %exp system/manager@hnsdh file=hnsdh_2005-8-17 log=hnsdh_exp_2005-8-17 full=y (此处命名为示例,以实施当日日期为准) 察看日志结尾,以判定导出是否成功。 #cat hnsdh_2005-8-17.dmp | od -x | head 看第二和第三个字节组成的十六进制数是多少可判断导出文件的字符集。 示例如下 #cat example.dmp | od -x | head 0000000 0303 5445 5850 4f52 543a 5630 392e 3032 。。。 0000220 646d 7000 0000 0000 0000 0000 0000 0000 十六进制的0354化为十进制为852,参造下表 NLS_CHARSET_ID NLS_CHARSET_NAME HEX_ID -------------- ------------------------------ ------------- 1 US7ASCII 1 2 WE8DEC 2 3 WE8HP 3 4 US8PC437 4 5 WE8EBCDIC37 5 6 WE8EBCDIC500 6 7 WE8EBCDIC1140 7 8 WE8EBCDIC285 8 ................... 850 ZHS16CGB231280 352 851 ZHS16MACCGB231280 353 852 ZHS16GBK 354 853 ZHS16DBCS 355 860 ZHT32EUC 35c 861 ZHT32SOPS 35d 862 ZHT16DBT 35e 863 ZHT32TRIS 35f 864 ZHT16DBCS 360 865 ZHT16BIG5 361 866 ZHT16CCDC 362 867 ZHT16MSWIN950 363 868 ZHT16HKSCS 364 870 AL24UTFFSS 366 871 UTF8 367 872 UTFE 368 即可得出这个dmp文件的字符集ZHS16GBK。 10.2 在数据库中直接更改字符集参数 操作步骤如下: SQL> shutdown immediate SQL> startup mount SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0; SQL> ALTER DATABASE OPEN; SQL> alter session set events '10046 trace name context forever,level 12'; SQL> alter database character set INTERNAL_USE ZHS16GBK; SQL> shutdown immediate SQL> startup 察看系统字符集 SQL> SELECT * FROM NLS_DATABASE_PARAMETERS; 看NLS_CHARACTERSET的值为多少,如果为ZHS16GBK则说明改动成功。 如果执行正常,则按照下一节进行测试操作。 10.3 更改成功后的测试 测试1,在数据库服务器端下测试 %setenv NLS_LANG "SIMPLIFIED CHINESE_CHINA.ZHS16GBK"; %stty -istrip -parity cs8; %setenv LANG zh %sqlplus /nolog SQL〉conn / as sysdba SQL〉create table test_tq (a char(20)); SQL〉insert into test_tq 1>(a) 2>values ('洣洣'); SQL〉select * from test_tq; 如显示为 A -------------------- 洣洣 则成功。 测试2,Windows客户端环境下测试 运 行REGEDIT,第一步选HKEY_LOCAL_MACHINE,第二步选择SOFTWARE, 第三步选择 ORACLE, 第四步选择 NLS_LANG, 键 入 与服 务 器 端 相 同 的 字 符 集(本例为:AMERICAN_AMERICAN.US7ASCII)。 右击我的电脑,然后点击属性,“高级”页面下,点击“环境变量”,在系统变量中添加: 变量名:NLS_LANG 变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 运行cmd,输入echo %NLS_LANG%,查看系统变量设置时否成功 然后运行: $sqlplus system/manager@hnsdh SQL〉conn / as sysdba SQL〉create table test_tq (a char(20)); SQL〉insert into test_tq 1>(a) 2>values ('洣洣'); SQL〉select * from test_tq; 如显示为 A -------------------- 洣洣 则成功。 10.4 更改不成功时的措施 新建数据库,设定字符集ZHS16GBK,其他参数先照搬原来的,并倒入数据。建库时所需的具体参数在重建之前要搜集。注意在配置控制文件时设定最大数据文件数。 建好数据库以后,执行以下命令即可恢复数据库 %cd /sybdata/orabak %imp system/manager@hnsdh full=y ignore=y file=hnsdh_2005-8-17 log=hnsdh_imp_2005 -8-17

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧