科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道也谈“Oracle和D/2000字符集的选择和改变”

也谈“Oracle和D/2000字符集的选择和改变”

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  本人阅读了河北省统计局--贾书民网友的 "Oracle 和Developer/2000字符集的选择和改变"后, 对其部分说法表示疑惑:      ---- 疑惑1, 要正确处理汉字,一般有两种方案可供选择:      ---- 方案一:使用US7

作者:中国IT实验室 来源:中国IT实验室 2007年10月7日

关键字: 数据库 ORACLE

  • 评论
  • 分享微博
  • 分享邮件

  本人阅读了河北省统计局--贾书民网友的 "Oracle 和Developer/2000字符集的选择和改变"后, 对其部分说法表示疑惑:
  
  ---- 疑惑1, 要正确处理汉字,一般有两种方案可供选择:
  
  ---- 方案一:使用US7ASCII字符集.
  
  ---- 方案二:使用ZHS16CGB231280字符集.
  
  ---- 照我的理解(本人用过两年的Developer/2000), 并不一定只可使用这两种字符集, 只要你写forms时用的字符集和运行forms时用的字符集一样即可(尽管我只用过WE8ISO8859P1和ZHS16CGB231280这两种字符集).
  
  ---- 关键之处在于你启动forms和运行forms一霎那, 注册表HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE下的NLS_LANG 所表示的字符集一样, 即可.
  
  ---- 疑惑2, 一旦数据库创建之后, 数据库的字符集是不能改变的, 如果要改变数据库的字符集, 只有重新创建数据库("还有后面一段很长的参考方法").
  
  ---- 其实不然, 要改变数据库的字符集, 太简单了, 你只需以sys的身份登陆Oracle, 然后: SQL > update props$ set value$='你想要的字符集' where name='NLS_CHARACTERSET';
  
  ---- SQL > commit;
  
  ---- 之后, 再关闭,重启动数据库即可.
  
  ---- 疑惑3.Developer/2000 字符集的改变(还有后面的一段说法).
  
  ---- 要想客户端的forms程序运行时, 看到正常的字符(客户端用的是Developer/2000 服务器端用Oracle),需要选择相同的字符集; 否则, 至多你只能看到一处正常的字符(当你运行forms时的字符集与你编写forms程序的字符集一样, 则可看到客户端forms程序正常的字符 当与Oracle的字符集一样时, 则可看到Oracle正常的字符).
  
  ---- 另外, 也不是("所以,如果要修改源程序,还要对其中的汉字重新改写"). 那多麻烦, 本人97年在襄樊市电信局作97工程时, 也遇过此类问题, 当时电信局计算机中心的周主任找到了其中的解决方法. 简述如下:
  
  ---- (假设你用了WE8ISO8859P1字符集编写了forms, 数据库用的是ZHS16CGB231280, 现在要把这些forms程序的字符集改成和数据库的一样). 操作如下:
  
  1.点击菜单 File-- >administration-- >convert
  
  2.type选择Form, Direction选择Binary-To-Text, Browse为某一用了WE8ISO8859P1字符集编写了
  forms的*.fmb.
  
  3.点击 Convert 按钮, 把二进制的*.fmb改写为文本文件*.fmt.
  
  4.用 Edit 软件把此 *.fmt 打开.
  
  5.把里面的 NAME_SET = 31, CS = 31 改成 NAME_SET = 850, CS = 850
  (原因 31 指的是 WE8ISO8859P1 字符集, 850 指的是 ZHS16CGB231280 字符集)
  
  6.步骤如 2 不过把Direction选择Text-To-Binary Browse 为刚才的 *.fmt
  
  7.再重新生成此 *.fmb 为 *.fmx
  ---- 此时, 你再在注册表中Oracle的字符集为ZHS16CGB231280下运行此程序, 就能看到正确的字符集.
  
  ---- 此步骤虽然稍有繁琐, 但总比重新编写程序快捷, 尤其是大批量的程序的时候. 另外, 你可以编写一个小程序来代替步骤4,5. 需要注意的一点是一开始执行步骤2时前, 注册表中Oracle的字符集应为WE8ISO8859P1 执行步骤6时前, 注册表中Oracle的字符集应为ZHS16CGB231280.
  
  ---- 有兴趣的朋友, 不妨照本人的说法试试.
  

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章