Oracle数据库字符集转换规律全面剖析

作为一个Oracle数据库的用户,对于Export和Import两个命令绝对不会感到陌生,因为这二者正是我们经常用于数据备份和恢复的工具。但在使用这两个命令过程中所发生的Oracle字符集问题,常给一些Oracle使用者带来不必要的麻烦和不必要的数据损失。本文将就Export和Import过程中Oracle字符集的转换规律及使用这两个命令的注意事项做一总结。

字符集转换的原因

Export、Import过程如上图所示,从这个示意图中可以看到有四处关系到字符集,而这四处字符集的不一致恰恰是导致Oracle进行字符集转换的原因。

* 源数据库字符集;

* Export过程中用户会话字符集;

* Import过程中用户会话字符集;

* 目标数据库字符集。

在Export和Import过程中,如果存在影响字符集转换的四因素不一致,则可能发生Oracle字符集转换,即:

在Export过程中,如果源数据库字符集与Export用户会话字符集不一致,会发生字符集转换,并在导出的二进制格式Dmp文件的头部几个字节中存储Export用户会话字符集的ID号。在这个转换过程中可能发生数据的丢失。

例1: 如果源数据库使用ZHS16GBK,而Export用户会话字符集使用US7ASCII,由于ZHS16GBK是8位字符集,而US7ASCII是7位字符集,这个转换过程中,中文字符在US7ASCII中不能够找到对等的字符,所以所有中文字符都会丢失而变成“?? ”形式,即这种转换后生成的Dmp文件已经发生了数据丢失。

例2: 如果源数据库使用ZHS16GBK,而Export用户会话字符集使用ZHS16CGB231280,但由于ZHS16GBK字符集是ZHS16CGB231280字符集的超集,这个过程中绝大部分字符都能够正确转换,只有一些超出ZHS16CGB231280字符集的字符变为“?? ”形式。如果源数据库使用ZHS16CGB231280字符集,而Export用户会话使用ZHS16GBK字符集,则转换过程能够完全转换成功。

时间: 2024-10-18 21:40:09

Oracle数据库字符集转换规律全面剖析的相关文章

全面认识Oracle数据库字符集

    什么是Oracle字符集    Oracle字符集是一个字节数据解释的符号集合,有大小之分,有相互的包容关系.    Oracle支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库工具,错误消息,排序次序,日期,时间,货币,数字和日历自动适应本地化语言和平台.    影响oracle数据库字符集最重要的参数是NLS_LANG参数.它的格式如下:    NLS_LANG = language_territory.charset    它有三个组成部分(语言.地域和

oracle数据库字符集学习笔记

一.什么是oracle字符集 oracle字符集实质就是按照一定的字符编码方案,对一组特定的符号,分别赋予不同数值编码的集合. 影响oracle数据库字符集最重要的参数是NLS_LANG参数. 它的格式如下: NLS_LANG = language_territory.charset 它有三个组成部分(语言.地域和字符集),每个成分控制了NLS子集的特性. 其中: Language:指定服务器消息的语言,影响提示信息是中文还是英文 Territory:指定服务器的日期和数字格式 Charset:

oracle 数据库字符集研究 上篇

一.什么是Oracle字符集        Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台.   影响Oracle数据库字符集最重要的参数是NLS_LANG参数. 它的格式如下: NLS_LANG = language_territory.charset 它有三个组成部分(语言.地域和字符集),

Oracle数据库字符集问题总结

在不同数据库做数据迁移.同其它系统交换数据等,常常因为字符集不同而导致迁移失败或数据库内数据变成乱码.现在我将oracle字符集相关的一些知识做个简单总结 一.什么是oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台. 影响oracle数据库字符集最重要的参数是NLS_LANG参

Oracle数据库字符集

问题描述 各位大侠,今天遇到一个Oracle数据库字符集的问题,同一个应用部署在两个系统上,一个基于Unix的,一个基于windows的,这两个应用连接同一个Oracle数据库,在测试的时候发现,unix上面的应用显示的字符(俄文)能正常显示,windows上面的应用,显示俄文为乱码,PL/SQL查询出来的结果集也为乱码,我已经将windows注册表中的Oracle字符集修改为跟Oracle服务器一致,但PL/SQL查询出来的结果仍然为乱码,应用页面显示的同样是乱码. 问题补充:unika_ly

oracle 数据库字符集问题谁帮忙解释一下

问题描述 oracle数据库字符集we8iso8859p1,jdbc连接怎样设置和数据库字符集一致?

Oracle数据库字符集问题解析 zz

oracle|数据|数据库|问题 经常看到一些朋友问ORACLE字符集方面的问题,我想以迭代的方式来介绍一下. 第一次迭代:掌握字符集方面的基本概念. 有些朋友可能会认为这是多此一举,但实际上正是由于对相关基本概念把握不清,才导致了诸多问题和疑问.首先是字符集的概念.我们知道,电子计算机最初是用来进行科学计算的(所以叫做"计算机"),但随着技术的发展,还需要计算机进行其它方面的应用处理.这就要求计算机不仅能处理数值,还能处理诸如文字.特殊符号等其它信息,而计算机本身能直接处理的只有数值

oracle 数据库字符集研究 下篇

整理自:http://blog.itpub.net/519536/viewspace-615379/ 自从选用了AL32UTF8字符集做为生产数据库字符集之后,就一直奔走于"乱码"与"转码"之间. 如果想要搞清楚Oracle的字符系统,需要紧紧地抓住三个因素:一."客户终端字符集"二."NLS_LANG"环境变量三."数据库字符集" 如果"NLS_LANG"等于"数据库字符集&

oracle 数据库字符集研究 中篇

四.EXP/IMP 与 字符集 4.1 EXP/IMP    Export 和 Import 是一对读写Oracle数据的工具.Export 将 Oracle 数据库中的数据输出到操作系统文件中, Import 把这些文件中的数据读到Oracle 数据库中,由于使用exp/imp进行数据迁移时,数据从源数据库到目标数据库的过程中有四个环节涉及到字符集,如果这四个环节的字符集不一致,将会发生字符集转换. EXP     ____________ _________________ ________