一、字符集的选择
在Oracle客户机/服务器应用中,前端开发工具Developer/2000应和Oracle数据库选择相同的字符集,否则Developer/2000不能正确处理汉字,如不能输入汉字、汉字显示乱码等。要正确处理汉字,一般有两种方案可供选择:
方案一:使用US7ASCII字符集。
在创建Oracle数据库时,字符集选择US7ASCII,在安装Developer/2000时,语言选择English,安装完成后,Developer/2000缺省的字符集不是US7ASCII,应将windows目录下的oracle.ini文件中[Oracle]节里的
NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
修改为
NLS_LANG=AMERICAN_AMERICA.US7ASCII
方案二:使用ZHS16CGB231280字符集。
在创建Oracle数据库时,字符集选择ZHS16CGB231280。在安装Developer/2000时,语言相应地选择SimplifiedChinese,其缺省的字符集为ZHS16CGB231280。
如果采用方案一,一个汉字相当于两个字符。例如"一个汉字"的长度是8,substr('一个汉字',1,2)的结果为"一"。如果采用方案二,一个汉字相当于一个字符。例如"一个汉字"的长度是4,substr('1个汉字',1,2)的结果为"一个"。
在客户端,方案一能正常显示库中的汉字,但在录入单个汉字时有时需要加空格,录入词组时有时会显示乱码;方案二能正常处理汉字,包括正确显示和录入汉字。
二、字符集的改变
1.Oracle数据库字符集的改变
Oracle数据库的字符集是在安装数据库时选定的,一旦数据库创建之后,数据库的字符集是不能改变的,如果要改变数据库的字符集,只有重新创建数据库。如果要在使原数据库中数据保持不变的前提下改变字符集,则可以参考以下方法:
1)关闭Oracle,物理备份Oracle系统。
2)启动Oracle,修改sys的表props$,把name='NLS_CHARACTERSET'行的values$设置为新的字符集。例如
updateprops$setvalue$='ZHS16CGB231280'wherename='NLS_CHARACTERSET';
3)设置环境变量NLS_LANG。例如
NLS_LANG=AMERICAN_AMERICA.ZHS16CGB231280
4)用EXP做全部数据库备份。
5)关闭Oracle。
6)重新创建数据库。
7)用IMP做全部数据库恢复。
8)如果由于各种原因不成功,可以使用第一步的物理备份恢复原始数据库。
2.Developer/2000字符集的改变
Developer/2000安装后,可以通过修改文件oracle.ini修改字符集,修改方法可参考方案一。
Developer/2000的字符集改变以后,原来编译好的文件(如*.fmx)可以正常运行,但源文件(如*.fmb)里的提示性汉字显示为乱码,即使重新编译以后运行,提示性汉字仍显示为乱码。所以,如果要修改源程序,还要对其中的汉字重新改写。