本人阅读了河北省统计局--贾书民网友的 "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.
---- 有兴趣的朋友, 不妨照本人的说法试试.
查看本文来源