转载:http://blog.sina.com.cn/s/blog_c58d04bf0101lbka.html
在日常工作中,我们经常会遇到字符集的问题。Export 和 Import 是一对读写Oracle数据的工具。Export 将 Oracle 数据库中的数据输出到操作系统文件中, Import 把这些文件中的数据读到Oracle 数据库中,由于使用exp/imp进行数据迁移时,数据从源数据库到目标数据库的过程中有四个环节涉及到字符集,如果这四个环节的字符集不一致,将会发生字符集转换。
四个字符集是:
(1)源数据库字符集
(2)Export过程中用户会话字符集(通过NLS_LANG设定)
(3)Import过程中用户会话字符集(通过NLS_LANG设定)
(4)目标数据库字符集
一、导出的转换过程
在Export过程中,如果源数据库字符集与Export用户会话字符集不一致,会发生字符集转换,并在导出文件的头部几个字节中存储Export用户会话字符集的ID号。在这个转换过程中可能发生数据的丢失。
例:如果源数据库使用ZHS16GBK,而Export用户会话字符集使用US7ASCII,由于ZHS16GBK是16位字符集,而US7ASCII是7位字符集,这个转换过程中,中文字符在US7ASCII中不能够找到对等的字符,所以所有中文字符都会丢失而变成“?? ”形式,这样转换后生成的Dmp文件已经发生了数据丢失。
因此,如果想正确导出源数据库数据,则Export过程中用户会话字符集应等于源数据库字符集或是源数据库字符集的超集。
二、导入的转换过程
(1)确定导出数据库字符集环境
通过读取导出文件头,可以获得导出文件的字符集设置
(2)确定导入session的字符集,即导入Session使用的NLS_LANG环境变量
(3)IMP读取导出文件
读取导出文件字符集ID,和导入进程的NLS_LANG进行比较
(4)如果导出文件字符集和导入Session字符集相同,那么在这一步骤内就不需要转换,如果不同,就需要把数据转换为导入Session使用的字符集。可以看出,导入数据到数据库过程中发生两次字符集转换。
第一次:导入文件字符集与导入Session使用的字符集之间的转换,如果这个转换过程不能正确完成,Import向目标数据库的导入过程也就不能完成。
第二次:导入Session字符集与数据库字符集之间的转换。
在做数据导入的时候,需要这三个字符集都一致:一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集
相关推荐
NULL 博文链接:https://cqh520llr.iteye.com/blog/2084643
ORACLE的多国语言设置最主要的 两个特性就是国家语言设置与字符集设置,国家语言设置决定了界面或提示使用的语言种类,字符集决定了数据库保存与字符集有关数据时候的编码规 则。正如刚才上面的一个小例子,环境变量...
mysql导出乱码 可以使用 导入导出命令 指定默认字符集,使导出的字符为中文
Oracle 字符集详解,包括查看,修改,导入导出,转换原理
Oracle字符集汇总,各种字符集配置,常见问题,导入导出等等,可以解决大多数Oracle字符集问题。 强烈推荐。(原创)
MySql修改访问访问权限、导入、导出、查看字符集、修改初始密码、查看数据库位数
本文章主要阐述了在不同字符集数据间导入数据的方法。文中以US7ASCII的库中导出的数据导入到字符集为ZHS16GBK的库为例子作了详细的介绍。
原创作品 by Yang Sheng Jun, 传播请保留签名 Oracle 配置UTF-8字符集 详述(原创)_解决各种影响乱码的场景 1. 创建utf-8 数据库 ...5. 客户端与数据库服务器字符集一致性保证 和检测 6. 导出数据库作为utf-8
c# 编写的winform 操作sql server数据库操作源程序,程序设计技巧性强,集sql server数据库操作之大全,跨窗体增加,修改数据,可连接,显示,修改,查询,导入/导出EXECL。可访问本地数据库,也可访问局域网数据库...
复制到浏览器中打开或者点击“阅读原文”),介绍《循序渐进Oracle》第三章的3.1-3.4节:字符集的基本知识、数据库的字符集、字符集文件及字符支持、NLS_LANG的设置与影响、导入导出及字符转换。 Oracle全球支持(即...
案例:从Linux导出的数据导入到windows环境中发现字符集安装时候忘了修改为zhs16gbk(是原来的al32utf8)。
达梦数据库管理系统DM程序员手册,讲述达梦7数据库的安装,作为管理员的日常管理操作
下面说一下,怎么样字符集统一成utf8 1,建一个空数据库 2,把表结构和数据是utf8的表导出,然后直接导入到新的数据库中 3,数据表和数据都是latin1的表,先导出表结构和数据,加上–default-character-set=latin1,...
本人转换过好多数据了,也用过了好多的办法,个人感觉最好用的就是使用MySQL命令导出导入中将字符集转换过去! 现在我将用图文并茂的方式向大家展示一下如何将MySQL字符集进行转换,由于字符集比较多,现在主要举GBK和...
主要讲述exp,imp常用选项,表空间传输,导入导出字符集,导入导出常见问题
本方法适用于Oracle9i, 10g以及XE.... 一种办法是先将数据库导出, 修改完字符集后再导入; 另一种办法就是不管他, 就那样使用. 一般如果是一个测试环境, 像方法二那样就可以了, 但是可能某些表无法读取, 需要注意.
基本上,一般的博客/论坛数据都不能保证这种纯净性,谁也不能保证你的文章中不会混合使用简体和繁体文字,所以这种跨字符集的导入导出数据难度很大.绝对不要轻易尝试这种游戏.目前的主流论坛如Discuz、PHPWind等都提供...
进行数据的导入导出时,我们要注意关于字符集的问题。在EXP/IMP过程中我们需要注意四个字符集的参数:导出端的客户端字符集,导出端数据库字符集,导入端的客户端字符集,导入端数据库字符集。 我们首先需要查看这...
神通数据库的数据导入和导出向导是前台管理工具中的一个实用工具,其主要功能是进行神通数据库 与其它各种异构数据源之间数据的析取、转换以及合并。数据导入和导出工具支持的数据源包括:神通数据 库、Oracle、...