当前位置:我的异常网» Oracle管理 » 两个数据库怎么保持数据正确显示

两个数据库怎么保持数据正确显示

www.myexceptions.net  网友分享于:2015-08-26  浏览:23次

两个数据库如何保持数据正确显示

我有两个DB, 所用的字符集都不相同

A数据库:WE8ISO8859P1

B数据库:UTF8.

现在想在A通过DBLink获取B数据库的数据, 但中文出现了乱码.怎么办?

各位达人可以给段java Code来将B数据库的数据在页面正确显示.

------解决方案--------------------

在导出的时候用Charset转换吧,如果你在程序中实现的逻辑操作的话,可以试一试用filter啊。

------解决方案--------------------

完全copy,转载;

------------------------------------------------------

在国内外大中型数据库管理系统中,把ORACLE作为数据库管理平台的用户比较多。ORACLE 不论是数据库管理能力还是安全性都是无可非议的,但是,它在汉字信息的显示方面着实给中国用户带来不少麻烦,笔者多年从事ORACLE数据库管理,经常收到周围用户和外地用户反映有关ORACLE数据库汉字显示问题的求援信,主要现象是把汉字显示为不可识别的乱码,造成原来大量信息无法使用。本文将就这一问题产生的原因和解决办法进行一些探讨,供存在这方面问题的用户朋友参考。

1、原因分析

通过对用户反映情况的分析,发现字符集的设置不当是影响ORACLE数据库汉字显示的关键问题。那么字符集是怎么一会事呢?字符集是ORACLE 为适应不同语言文字显示而设定的。用于汉字显示的字符集主要有ZHS16CGB231280,US7ASCII,WE8ISO8859P1等。字符集不仅需在服务器端存在,而且客户端也必须有字符集注册。服务器端,字符集是在安装ORACLE时指定的,字符集登记信息存储在ORACLE数据库字典的V$NLS_PARAMETERS表中;客户端,字符集分两种情况,一种情况是sql*net 2.0以下版本,字符集是在windows的系统目录下的oracle.ini文件中登记的;另一种情况是sql*net 2.0以上(即32位)版本,字符集是在windows的系统注册表中登记的。要在客户端正确显示ORACLE 数据库汉字信息,首先必须使服务器端的字符集与客户端的字符集一致;其次是加载到ORACLE数据库的数据字符集必须与服务器指定字符集一致。因此,把用户存在的问题归纳分类,产生汉字显示异常的原因大致有以下几种:

1. 1服务器指定字符集与客户字符集不同,而与加载数据字符集一致。

这种情况是最常见的,只要把客户端的字符集设置正确即可,解决办法见2.1。

1. 2服务器指定字符集与客户字符集相同,与加载数据字符集不一致。

这类问题一般发生在ORACLE版本升级或重新安装系统时选择了与原来服务器端不同的字符集,而恢复加载的备份数据仍是按原字符集卸出的场合,以及加载从其它使用不同字符集的ORACLE数据库卸出的数据的情况。这两种情况中,不管服务器端和客户端字符集是否一致都无法显示汉字。解决办法见2.2。

1.3服务器指定字符集与客户字符集不同,与输入数据字符集不一致。

这种情况是在客户端与服务器端字符集不一致时,从客户端输入了汉字信息。输入的这些信息即便是把客户端字符集更改正确,也无法显示汉字。解决办法见2.3。

2.解决办法

下面将分别对上述三种情况给出解决办法。为了叙述方便,假设客户端使用WINDOWS95/98环境,并已成功地配置了TCP/IP协议,安装了ORACLE的sql*net,sql*pluse产品。

2.1 设置客户端字符集与服务器端字符集一致

假设当前服务器端使用US7ASCII字符集。

(1)查看服务器端字符集

通过客户端或服务器端的sql*plus登录ORACLE的一个合法用户,执行下列SQL语句:

SQL > select * from V$NLS_PARAMETERS

parameter value

NLS_LANGUAGE AMERICAN

NLS_TERRITORY AMERICA

…. ….

NLS_CHARACTERSET US7ASCII

NLS_SORT BINARY

NLS_NCHAR_CHARACTERSET US7ASCII

从上述列表信息中可看出服务器端ORACLE数据库的字符集为 'US7ASCII '。

(2)按照服务器端字符集对客户端进行配置

配置方法有两种:

安装ORACLE的客户端软件时指定

在安装ORACLE的客户端产品软件时,选择与ORACLE服务端一致的字符集(本例为US7ASCII)即可。

修改注册信息的方法

根据ORACLE 客户端所选sql*net 的版本分为下列两种情况:

a. 客户端为 sql*net 2.0 以下版本

进入Windows的系统目录,编辑oracle.ini文件,用US7ASCII替换原字符集,重新启动计算机,设置生效。

b. 客户端为 sql*net 2.0 以上版本

在WIN98 下 运 行REGEDIT,第一步选HKEY_LOCAL_MACHINE,第二步选择SOFTWARE, 第三步选择 ORACLE, 第四步选择 NLS_LANG, 键 入 与服 务 器 端 相 同 的 字 符 集(本例为:AMERICAN_AMERICAN.US7ASCII)。

2.2 强制加载数据字符集与服务器端字符集一致

假设要加载数据从原ORACLE数据库卸出时的字符集为US7ASCII,当前ORACLE服务器字符集为WE8ISO8859P1。

下面提供三种解决方法:

(1) 服务器端重新安装ORACLE

在重新安装ORACLE 时选择与原卸出数据一致的字符集(本例为US7ASCII)。

加载原卸出的数据。

这种情况仅仅使用于空库和具有同一种字符集的数据。

(2)强行修改服务器端ORACLE当前字符集

在用imp命令加载数据前,先在客户端用sql*plus登录system DBA用户,执行下列SQL语句进行当前ORACLE数据库字符集修改:

SQL > create database character set US7ASCII

* create database character set US7ASCII

ERROR at line 1:

ORA-01031: insufficient privileges

你会发现语句执行过程中,出现上述错误提示信息,此时不用理会,实际上ORACLE数据库的字符集已被强行修改为US7ASCII,接着用imp命令装载数据。等数据装载完成以后,shutdown 数据库,再startup 数据库,用合法用户登录ORACLE数据库,在sql> 命令提示符下,运行select * from V$NLS_PARAMETERS,可以看到ORACLE数据库字符集已复原,这时再查看有汉字字符数据的表时,汉字已能被正确显示。

(3)利用数据格式转储,避开字符集限制

这种方法主要用于加载外来ORACLE数据库的不同字符集数据。其方法如下:

先将数据加载到具有相同字符集的服务器上,然后用转换工具卸出为foxbase 格式或access格式数据库,再用转换工具转入到不同字符集的ORACLE数据库中,这样就避免了ORACLE字符集的困扰。目前数据库格式转换的工具很多,象power builder5.0以上版本提供的pipeline,Microsoft Access数据库提供的数据导入/导出功能等。转换方法参见有关资料说明。

文章评论

oracle为什么不用指定数据库,两个数据库怎么保持数据正确显示相关推荐

  1. 批量比对 mysql 字段_MS SQL Server数据库两个库之间相同数据表名内容批量对比方法...

    上一篇"导出记录数量对比-软件测试方法(一)",主要介绍数据导出结果记录数量和原始正常好库的记录数量精确对比,测试软件导出少数据的相关bug. 本文测试方法旨在更精确比对表记录内部 ...

  2. 比较两个日期oracle,在oracledb中比较两个日期并不能得到正确的结果

    我有两个 DATE Order_date Service_date 01-06-17 31-01-18 01-06-17 01-10-18 01-06-17 01-07-18 01-06-17 01- ...

  3. ssm框架可以不用ajax,SSM框架关于后台返回JSON数据中显示很多不需要的字段为NULL...

    docker入门-学习笔记 docker可以类比成window下的VMware或者virtualbox软件.docker有两个基本的概念:容器(container)和镜像(image),分别对应为VM ...

  4. oracle两个数据库之间,如何实现oracle两个数据库之间的同步

    如何实现oracle两个数据库之间的同步 关注:166  答案:2  手机版 解决时间 2021-01-23 22:02 提问者美人如画皮 2021-01-23 13:26 如何实现oracle两个数 ...

  5. Oracle 9i amp; 10g编程艺术-深入数据库体系结构——第12章:数据类型

    第12章                      数据类型 选择一个正确的数据类型,这看上去再容易不过了,但我屡屡见得选择不当的情况.要选择什么类型来存储你的数据,这是一个最基本的决定,而且这个决定 ...

  6. oracle数据库怎么创建数据库 oracle数据库工作流程

    oracle数据库怎么创建数据库 数据库用户的创建.权限的分配 数据库安装完成后,有两个系统级的用户: system 默认密码为:manager sys 默认密码为:change_on_install ...

  7. oracle 数据库组成部分(数据库(各种文件)+实例(SGA PGA + 后台进程))知识

    一.SQL server中的实例与数据库   1.SQL中的实例指的是一个SQL server服务器上仅有一个缺省实例.  缺省实例名即为机器名ServerName或IP),如果在同一台机器上再安装S ...

  8. oracle向达梦迁移工作量,从Oracle安全移植到国产达梦数据库的DBA实践

    随着我国对信息安全和自主可控技术的日益重视,国产数据库在党政机关.军队和大型央企等行业中得到了快速应用.达梦数据库(以下简称DM)是国内数据库行业领军企业--达梦推出的一款自主可控的高性能数据库产品. ...

  9. sqlserver 两个数据库同步

    以下实现复制步骤(以快照复制为例) 运行平台SQL SERVER 2005 一.准备工作: 1.建立一个 WINDOWS 用户,设置为管理员权限,并设置密码,作为发布快照文件的有效访问用户. 2.在S ...

最新文章

  1. 3164 质因数分解
  2. Adobe与Facebook联手推出Flash开发工具
  3. equals方法变量和常量位置区别
  4. android微信支付的实现
  5. 数组|leetcode35.搜索插入位置
  6. 多功能复合机基于用户认证功能的实现过程详解
  7. 说说过游戏保护(4)
  8. 获得进程id_浅谈python中的多线程和多进程(二)
  9. 腾讯广告招人啦,校招优质岗位你不容错过!
  10. (转) Lua: 给 Redis 用户的入门指导
  11. Packet Tracer 5.0建构CCNA实验攻略2配置vlan
  12. 洛谷——P1375 小猫
  13. 计算机机房搬迁预算,信息中心机房整体搬迁方案.doc
  14. mtk6737t摄像头配置文件的编译
  15. Python实现的双目相机标定系统
  16. 2021年机修钳工(中级)考试内容及机修钳工(中级)考试总结
  17. 使用第三方软件管理苹果设备
  18. WICC 广州高峰对话:为开发者标注「航海地图」
  19. Android 路径(Path)与剪裁(Clipping)详解
  20. 易视通(easy media player) v2.0 build 20070626 是什么

热门文章

  1. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
  2. Redis缓存穿透击穿雪崩
  3. NVIDIA深度架构
  4. MindSpore技术理解(下)
  5. 地图构建两篇顶级论文解析
  6. linux ftp随机端口,linuxFTP生产环境配置
  7. C++ 双端队列(deque)的使用
  8. shell /dev/null
  9. 漫谈五种IO模型(主讲IO多路复用)
  10. Ocelot + Consul实践