分享
 
 
 

Oracle中的汉字显示

王朝oracle·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

Oracle以其强大的数据库管理能力、高安全性、多用户操作时数据的一致性,赢得了用户的广泛青睐,获得了很高的市场占有率。但是,它在汉字信息显示时存在多种字符集,且相互之间不能通用,这就给多数据库之间的数据共享带来了一些麻烦。

笔者从事Oracle数据库管理及应用软件的开发工作多年,常遇到Oracle数据库汉字显示的问题,主要现象是汉字显示为不可识别的乱码,信息无法使用。本文介绍笔者在实际工作中的一点心得,与大家一起探讨。

中英文Oracle之间的数据共享

在笔者的实际工作中,有为多个二级厂矿开发的基于Oracle数据库的应用程序,而各个单位所用的Oracle数据库,在安装时所采用的字符集各不相同,有的用英文字符集,有的用中文字符集。当表中的数据只是数字、英文信息时,数据共享是可以的; 当表中含有汉字信息时,以正常的方式进行共享,就看不到汉字了,而只会见到一些乱码。下面以Oracle 7.3版的数据库为例说明解决方法。

假设源数据库是中文字符集,目标数据库是英文字符集,利用 Delphi作为转换工具。实际的步骤依据导入和导出有所不同,导出数据时步骤如下:

1. 配置客户端字符集

首先将本机Oracle客户端的字符集配置得和源数据库的字符集一致。打开注册表,找到HKEY_LOCAL_MACHINE,选下面的SOFTWARE,再选Oracle,在注册表中找到NLS_LANG,将值改为:AMERICAN_AMERICA.ZHS16CGB231280。

2. 配置数据库别名

用Delphi的工具SQL EXPLORER配置两个数据库假名,其中DBSOURCE1用来连接源数据库,DBMIDDLE1用来连接中间数据库(Paradox表)。

3. 导出

打开Delphi的工具Database DeskTop,在主菜单中选Tools下面的Utilities,再选Copy,会弹出一个新的对话框,在Alias(数据库别名)中选择DBSOURCE1,并输入用户口令。在打开的数据库中选择需要的表,点击OK按钮。在Alias(数据库别名)中选择DBMIDDLE1。在File Name栏中输入目标表名,点击COPY按钮,如果显示: Copy Successfully Completed,则数据导出成功。

导入数据时步骤如下:

1. 配置客户端字符集

首先将本机Oracle客户端的字符集配置得和目标数据库的字符集一致。打开注册表,找到HKEY_LOCAL_MACHINE,选下面的SOFTWARE,再选Oracle,在注册表中找到NLS_LANG,将值改为:AMERICAN_AMERICA.US7ASCII。

2. 配置数据库别名

用Delphi的工具SQL EXPLORER配置一个数据库别名:DBTARGET1,用来连接目标数据库。

3. 导入

打开Delphi的工具Database DeskTop,在主菜单中选Tools下面的Utilities,再选Copy,会弹出一个新的对话框,在Alias(数据库别名)中选择DBMIDDLE1。在打开的数据库中选择需要的表,点击OK按钮。在Alias(数据库别名)中选择DBTARGET1,并输入用户口令。在File Name栏中输入目标表名,点击COPY按钮,如果显示: Copy Successfully Completed,则数据导入成功。此时,在目标数据库中查看导入的表,汉字显示就正常了。

小型机和PC服务器之间的

数据共享

笔者所在公司有小型机Alpha 2100作为数据库服务器,上面有多个二级单位使用。随着时间的推移,数据增加,用户增加,小型机不堪重负,运行速度缓慢,不能满足日常的工作需要。为了缓解这种情况,有部分单位自备了PC服务器,将数据从小型机上移植下来,建立了自己单独的数据库。

两个数据库都安装的是英文字符集,从小型机上导出的数据,装入到PC服务器,遇到汉字信息也不能正常显示。这主要是因为两者的操作系统不同,小型机上是VMS系统,而PC服务器上是NT 4.0,有两种方法可以解决这个问题:

1. 用仿真终端的方式将数据导出

用Telnet连接到小型机上,执行exp,将某个用户的数据库导出为一个*.dmp文件,保存在PC服务器上。

2. 用FTP将数据取到本机

用FTP连接到小型机上,执行bin,再执行Get,将数据(*.dmp文件)以二进制的方式传输到本机。注意这里必须用二进制方式,否则数据无法正常使用。

得到小型机上的数据后,再将本机客户端配置得和PC服务器的字符集一致,将数据导入PC服务器数据库中,则一切数据均可使用了。

数据库升级 在数据库的使用中常会遇到Oracle的版本升级,如何在保证原来数据安全的情况下,将数据库平稳地升级?这里分两种情况:

1. 英文字符集的安装

如果原来的数据库安装采用的是英文字符集,则从Oracle 7.3升级到Oracle 8.0.5时,只要将数据字典Props$中的参数修改为“US7ASCII”即可。

以系统DBA的身份登录SQL*PLUS,执行如下的命令,修改数据字典:

SQLUPDATE PROPS$ SET VALUE$=‘US7ASCII’WHERE NAME=‘NLS_CHARACTERSET’;

SQLCOMMIT;

注意,修改后必须重新启动数据库,配置才起作用,然后将从Oracle

2. 中文字符集的安装

如果原来的数据库安装采用的是中文字符集,直接将数据导入,是否可用呢?不可以,汉字显示为乱码。

原因是Oracle 7.3的中文字符集的参数是:ZHS16CGB231280,而Oracle 8.0.5的中文字符集的参数是:ZHS16GBK。两者不一样,为了能正常地使用,必须修改Oracle 8.0.5的数据字典的参数为:ZHS16CGB231280。具体的修改步骤如下, 用系统DBA的身份登录SQL*PLUS,执行:

SQLUPDATE PROPS$ SET VALUE$=‘ZHS16CGB231280’WHERE NAME=‘NLS_CHARACTERSET’;

SQLCOMMIT;

注意,修改后必须重新启动数据库,配置才起作用,然后将从Oracle 7.3导出的数据,导入Oracle 8.0.5的数据库中即可。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有